我正在尝试查找JSON值的路径。请考虑以下JSON:
{
"car": {
"type": [{
"sedan": {
"make": "honda",
"model": "civics"
}
},
{
"coupe": {
"make": "ford",
"model": "escort"
}
}]
}
}
如何获得价值“本田”的路径?我想找到这样的东西......
car_type_0_sedan_make_的本田
JSON.NET是否支持此功能?我看到有一个 JToken.Path 属性,但它目前不可用。 http://json.codeplex.com/workitem/24136
答案 0 :(得分:16)
您也可以尝试这样的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
答案 1 :(得分:15)
更新到Json.NET的latest version。 Path
已将JToken
属性添加到version 5.0 release 1中的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());
}
}
(2013年4月7日)。
以下是一个可用于验证其是否有效的测试程序:
car.type[0].sedan.make -> honda
输出:
{{1}}
答案 2 :(得分:0)
还有一种方法可以使用linq通过值检索路径。你需要Json.NET。
JObject jo = JObject.Parse(json);
var token = jo.Descendants()
.OfType<JProperty>()
.Where(p => p.Value.ToString() == "honda")
.First();
Console.WriteLine(token.Path);
答案 3 :(得分:-3)
您可以将Json转换为动态对象,如下所示。
JavaScriptSerializer js=new JavaScriptSerializer();
var dataObject=Json.Decode(jsonString);
然后你可以反思它并找出你的字符串“honda”并根据你的意愿构建路径。