首页 > 解决方案 > 在 Newtonsoft 的深层嵌套 JSON 中找到深层子元素的更简单方法?

问题描述

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

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

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

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

标签: c#json.net

解决方案


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

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" }


推荐阅读