JObject对象如何获取深度属性值&不判断key是否存在获取值&获取含有特殊字符的key值

我们有时常会用到JObject对象接受数据,并通过JObject快速获取指定key的值,顺序的话是没有问题的,但是假如你遇到如下的JObject对象,该怎么快速获取数据呢?

{

  "details": {

    "threeds2.fingerprint": "123"

  },

  "paymentData": "456"

}

  正常情况下,你如果想获取键:threeds2.fingerprint的值,是怎么获取的?

  如下:

JObject jobj=Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(str);

string finger=jobj["details"]["threeds2.fingerprint"];

  但是这样写是存在风险的。  第一,我们没有加任何key的判断,容易报异常,那么换一种写法:

复制代码

Newtonsoft.Json.Linq.JObject jobj = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(str);

                if (jobj.ContainsKey("details"))

                {

                    Newtonsoft.Json.Linq.JToken jtoken = jobj["details"];

                    if (jtoken.Value<string>("threeds2.challengeResult")!=null)

                    {

                        string finger = jtoken["threeds2.challengeResult"].ToString();

                    }

                }

复制代码

  为了不报异常,加了各种判断,这样也不太好,最好的方案如下:

jobj.SelectToken("details.['threeds2.fingerprint']")).Value<string>();

  划重点:这里需要注意: SelectToken方法支持我们输入深度Key的访问路径来获取数据,父子级使用"."连接;如果遇到key含有特殊符号点的,使用中括号加单引号包裹。而且这种写法不会抛出异常,如果路径错误或不存在返回值为null。

深圳网站建设www.sz886.com

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容