在Newtonsoft中深度嵌套的JSON中找到深度子元素的更简单方法?

时间:2019-03-13 09:29:27

标签: c# json.net

我有一个嵌套非常深的JSON文件,如下所示:

{
   // many levels of nesting, from 10 to 50
   items: [{
       video: { // some data }
   }, {
       video: { // some data }
   }]
}

我知道我可以使用json.SelectTokens("long path here")选择那些video元素。但是,当您想在各处使用大量嵌套的JSON文件时,效率不高且对开发人员不友好。

为此,我们是否还有其他更简单的路径,例如CSS选择器?

2 个答案:

答案 0 :(得分:1)

您可以使用 LINQ Descendants 方法搜索嵌套对象。

const string json = @"{
    items: [{
        video: { id: 1, title: 'Video 1' }
    }, {
        video: { id: 2, title: 'Video 2' }
    }]
}";

var videos = JObject.Parse(json)
    .Descendants()
    .Where(x => x is JObject && x["id"] != null)
    .ToList();

var video = videos.Find(x => (int) x["id"] == 1);

从上方执行代码时,video变量包含以下内容:

  

{ "id": 1, "title": "Video 1" }

答案 1 :(得分:0)

我认为,一种更简单的方法是使用SelectToken / SelectTokens,它们使用JSONPath深入查看对象。

var video = o.SelectToken("$.items[?(@.id == 1)]");

阅读以获取更多信息:

https://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm