JObject對象如何獲取深度屬性值&不判斷key是否存在獲取值&獲取含有特殊字符的key值

  前言:咱們有時常會用到JObject對象接受數據,並經過JObject快速獲取指定key的值,順序的話是沒有問題的,可是假如你遇到以下的JObject對象,該怎麼快速獲取數據呢?spa

{
  "details": {
    "threeds2.fingerprint": "123"
  },
  "paymentData": "456"
}

 

  正常狀況下,你若是想獲取鍵:threeds2.fingerprint的值,是怎麼獲取的?code

  以下:對象

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

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

  可是這樣寫是存在風險的。  第一,咱們沒有加任何key的判斷,容易報異常,那麼換一種寫法:blog

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();
                    }
                }

  爲了避免報異常,加了各類判斷,這樣也不太好,最好的方案以下:token

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

  劃重點:這裏須要注意: SelectToken方法支持咱們輸入深度Key的訪問路徑來獲取數據,父子級使用"."鏈接;若是遇到key含有特殊符號點的,使用中括號加單引號包裹。並且這種寫法不會拋出異常,若是路徑錯誤或不存在返回值爲null。three

相關文章
相關標籤/搜索