使用 JSON .NET 查询 JSON
Querying JSON with JSON .NET
{
"kind": "folderTree",
"data":
[
{
"id": "IEAAALNZI7777777",
"title": "Root",
"childIds":
[
"IEAAALNZI4ADAKBQ",
"IEAAALNZI4ADAMBQ",
"IEAAALNZI4ADAMBR"
],
"scope": "WsRoot"
},
{
"id": "IEAAANE7I7777777",
"title": "Root",
"childIds":
[
"IEAAANE7I4AC2NTX"
],
"scope": "WsRoot"
},
{
"id": "IEAAALNZI7777776",
"title": "Recycle Bin",
"childIds":
[
"IEAAALNZI4ADALZ2",
"IEAAALNZI4ADAL52",
"IEAAALNZI4ADALR3"
],
"scope": "RbRoot"
}
]
}
我正在尝试查询以下 json 结构,搜索 child 项我想要 return 给定标题的 ID。
我正在尝试这样的事情:
var folder = json["data"].Children().Where(x => x["Title"] == "Root");
但我不确定语法是否正确
您可以使用 SelectTokens
to query LINQ to JSON objects. It supports JSONPath query syntax including wildcards. You can then further narrow down the search with a Where
子句:
var folders = json.SelectTokens("data[*]").Where(t => (string)t["title"] == "Root").ToList();
如果您不想要额外的 Where
子句,它还支持基于 属性 值过滤数组条目:
var folders = json.SelectTokens("data[?(@.title == 'Root')]").ToList();
以上两者做同样的事情。顺便说一下,您的 JSON 中有两个标题为 "Root" 的文件夹,因此您的查询将 return 多个结果。
{
"kind": "folderTree",
"data":
[
{
"id": "IEAAALNZI7777777",
"title": "Root",
"childIds":
[
"IEAAALNZI4ADAKBQ",
"IEAAALNZI4ADAMBQ",
"IEAAALNZI4ADAMBR"
],
"scope": "WsRoot"
},
{
"id": "IEAAANE7I7777777",
"title": "Root",
"childIds":
[
"IEAAANE7I4AC2NTX"
],
"scope": "WsRoot"
},
{
"id": "IEAAALNZI7777776",
"title": "Recycle Bin",
"childIds":
[
"IEAAALNZI4ADALZ2",
"IEAAALNZI4ADAL52",
"IEAAALNZI4ADALR3"
],
"scope": "RbRoot"
}
]
}
我正在尝试查询以下 json 结构,搜索 child 项我想要 return 给定标题的 ID。
我正在尝试这样的事情:
var folder = json["data"].Children().Where(x => x["Title"] == "Root");
但我不确定语法是否正确
您可以使用 SelectTokens
to query LINQ to JSON objects. It supports JSONPath query syntax including wildcards. You can then further narrow down the search with a Where
子句:
var folders = json.SelectTokens("data[*]").Where(t => (string)t["title"] == "Root").ToList();
如果您不想要额外的 Where
子句,它还支持基于 属性 值过滤数组条目:
var folders = json.SelectTokens("data[?(@.title == 'Root')]").ToList();
以上两者做同样的事情。顺便说一下,您的 JSON 中有两个标题为 "Root" 的文件夹,因此您的查询将 return 多个结果。