2013-01-17 152 views
1

我有串行化JSON字符串成JObject下面的代碼示例(使用Newtonsoft Json.NET C#):查找路徑/ JToken的名稱空間中的Newtonsoft JObject

var obj = JObject.Parse("{\"F01\" : \"f01\", " + 
        "\"F02\" : \"f02\", " + 
        "\"L01\" : [" + 
         "{" + 
          "\"L01F01\" : \"l01f01\", " + 
          "\"L01F02\" : \"l01f02\"" + 
         "}, " + 
         "{" + 
          "\"L01F01\" : \"l01f01\", " + 
          "\"L01F02\" : \"l01f02\"" + 
         "}, " + 
         "{" + 
          "\"L01F03\" : \"l01f03\" " + 
         "}, " + 
         "{" + 
          "\"L01F03\" : \"l01f03\", " + 
          "\"L01L02\" : [" + 
           "{" + 
            "\"L01L02F01\" : \"l01l02f01\"" + 
           "}" + 
          "]" + 
         "}" + 
        "]" + 
        "}"); 

注意,JSON具有動態結構不是數組中的所有項都具有相同的名稱和屬性。

而且我提出以下JTokens:

var test01 = obj["F01"]; 
var test02 = obj["L01"][0]["L01F01"]; 
var test03 = obj["L01"][3]["L01L02"][0]["L01L02F01"]; 

我想知道,如果有人知道任何方式來獲得在這個測試變量的「路徑」類似的方式:

GetPathOf(test01) => "F01" 
GetPathOf(test02) => "L01[0].L01F01" 
GetPathOf(test03) => "L01[3].L01L02[0].L01L02F01" 

謝謝!

回答

1

一個Path屬性添加到JTokenrelease 5.0.1(2013年4月7日)這不你描述什麼。

因此,在您例如,你可以簡單地寫:

string path03 = test03.Path; 

path03變量將包含然後L01[3].L01L02[0].L01L02F01

小提琴:https://dotnetfiddle.net/5Dhc4i

+0

相反方法通過使路徑到JToken得到一個嵌套JToken是使用myJToken.SelectObject(mypath中)。 [點擊](http://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JToken_SelectToken.htm)。還有一些重載。 – huha