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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM