JSON.NET 只有 return 个包含特定子节点的节点

JSON.NET only return nodes that contain a specific child node

在 JSON.NET 中执行 SelectToken 时,有没有办法可以 return 包含特定子元素的元素的 JTokens 列表?例如,是否有一个 SelectToken 仅 return 我下面的示例 JSON 中存在“status”子节点的节点?[​​=13=]

"Fruits": [
    {
        "id": "1",
        "value": "apple"
    },
    {
        "id": "2",
        "value": "banana",
        "status": [
            {
                "fresh": "yes",
                "peeled": "no"
            }
        ]
    },
    {
        "id": "3",
        "value": "orange",
        "status": [
            {
                "fresh": "yes",
                "peeled": "yes"
            }
        ]
    }
]

您可以使用 LINQ to JSON API 来完成这样的任务(假设 Fruits 是根 json 对象上的 json 属性 :

var jObject = JObject.Parse(json_string);
var list = jObject
    .Descendants()
    .OfType<JObject>()
    .Where(jp => jp.Children<JProperty>().Any(token => token.Name == "status"))
    .ToList();

或使用json路径:

var list = jObject.SelectTokens("$.Fruits[?(@.status)]").ToList();

最简单的方法是

var fruitsWithStatus=JObject.Parse(json)["Fruits"].Where(f => f["status"]!=null ).ToList();