c# - 使用 JSON .NET 查询 JSON

标签 c# linq-to-entities 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 结构,搜索我想要返回给定标题的 id 的子项。

我正在尝试这样的事情:

var folder = json["data"].Children().Where(x => x["Title"] == "Root");

但我不确定语法是否正确

最佳答案

您可以使用SelectTokens查询LINQ to JSON对象。它支持JSONPath query syntax包括通配符。然后,您可以使用 Where 进一步缩小搜索范围。子句:

var folders = json.SelectTokens("data[*]").Where(t => (string)t["title"] == "Root").ToList();

如果您不需要额外的 Where 子句,它还支持根据属性值过滤数组条目:

var folders = json.SelectTokens("data[?(@.title == 'Root')]").ToList();

以上两者都做同样的事情。顺便说一句,您的 JSON 中有两个标题为“Root”的文件夹,因此您的查询将返回多个结果。

关于c# - 使用 JSON .NET 查询 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33755045/

相关文章:

c# - 在 Windows Phone 上设计媒体播放器的好方法是什么?

c# - 访问 Windows 窗体控件时,BackgroundWorker 线程失败

linq-to-sql - LINQ根据日期数组查询记录

c# - 如何避免循环多线程任务中 JSON 序列化期间集合修改?

c# - Newtonsoft.Json 12.0.1 无法使用运行设置代码覆盖排除值

c# - 我可以在属性中指定路径以将类中的属性映射到 JSON 中的子属性吗?

c# - 使用子查询获取订单和订单行计数

c# - 集成 C# 和 R 问题

C# LINQ 通过比较键合并字典

c# - 为 select 中的表达式提取 lambda 片段