使用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”并根据你的意愿构建路径。