我试图找到一个JSON值的路径.考虑以下JSON:
{
"car": {
"type": [{
"sedan": {
"make": "honda",
"model": "civics"
}
},
{
"coupe": {
"make": "ford",
"model": "escort"
}
}]
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得价值"本田"的路径?我想找到这样的东西......
car_type_0_sedan_make_ honda
JSON.NET是否支持此功能?我看到有一个JToken.Path属性,但它目前不可用.http://json.codeplex.com/workitem/24136
Bri*_*ers 17
更新到最新版本的Json.NET.的Path
属性被添加到JToken
在版本5.0第1版(2013年4月7日).
这是一个测试程序,您可以用它来验证它的工作原理:
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());
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
car.type[0].sedan.make -> honda
Run Code Online (Sandbox Code Playgroud)
Col*_*ame 16
您也可以尝试这样的SelectToken
方法:
var j = JObject.Parse(json);
var value = j.SelectToken("car.type[0].sedan.make");
Console.WriteLine(token.Path + " -> " + token.ToString());
Run Code Online (Sandbox Code Playgroud)
输出:
car.type[0].sedan.make -> honda
Run Code Online (Sandbox Code Playgroud)
小智 5
还有一种方法可以使用 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);
Run Code Online (Sandbox Code Playgroud)
请参阅:https : //dotnetfiddle.net/vZ1zLg
归档时间: |
|
查看次数: |
19454 次 |
最近记录: |