使用JSON.NET获取JSON值的路径

我试图找到一个JSON值的路径。 考虑以下JSON:

{ "car": { "type": [{ "sedan": { "make": "honda", "model": "civics" } }, { "coupe": { "make": "ford", "model": "escort" } }] } } 

我怎样才能获得价值“本田”的路径? 我想找到这样的东西……

car_type_0_sedan_make_ honda

JSON.NET是否支持此function? 我看到有一个JToken.Path属性,但它目前不可用。 http://json.codeplex.com/workitem/24136

更新到最新版本的Json.NET。 Path属性已添加到版本5.0发行版1 (2013年4月7日)中的JToken

这是一个测试程序,您可以使用它来validation它的工作原理:

 class Program { static void Main(string[] args) { string json = @" { ""car"": { ""type"": [{ ""sedan"": { ""make"": ""honda"", ""model"": ""civics"" } }, { ""coupe"": { ""make"": ""ford"", ""model"": ""escort"" } }] } }"; JObject obj = JObject.Parse(json); JToken token = obj["car"]["type"][0]["sedan"]["make"]; Console.WriteLine(token.Path + " -> " + token.ToString()); } } 

输出:

 car.type[0].sedan.make -> honda 

你也可以尝试这样的SelectToken方法:

 var j = JObject.Parse(json); var value = j.SelectToken("car.type[0].sedan.make"); Console.WriteLine(token.Path + " -> " + token.ToString()); 

输出:

 car.type[0].sedan.make -> honda 

还有一种方法可以使用linq仅通过值检索路径。 你需要Json.NET。

 JObject jo = JObject.Parse(json); var token = jo.Descendants() .OfType() .Where(p => p.Value.ToString() == "honda") .First(); Console.WriteLine(token.Path); 

请参阅: https : //dotnetfiddle.net/vZ1zLg

您可以将Json转换为动态对象,如下所示。

 JavaScriptSerializer js=new JavaScriptSerializer(); var dataObject=Json.Decode(jsonString); 

然后你可以反思它并找出你的字符串“honda”并根据你的意愿构建路径。