如何查询 json 子对象并返回整个父对象

本文关键字:对象 返回 json 何查询 查询 | 更新日期: 2023-09-27 18:36:52

我不想写循环。我想看到所有可用的选项(使用 LINQ、SelectTokens、JSON.NET 或任何其他工具),这些选项让我返回相对于内部内容的数组对象。例如:

{
    "theFamilies": [{
        "parent1": "Joe",
        "parent2": "Mary",
        "child1": "Andy"
    }, {
        "parent1": "Bob",
        "parent2": "Mary",
        "child1": "Mark"
    }]
}

返回包含 "parent2" = "Mary" 的整个对象的列表。

如果..筑巢更深呢? 有没有一种很好的方法可以避免/忽略嵌套深度并递归地获取所有满足不需要任何编码更改的条件?

关于每种解决方案的利弊的任何评论将不胜感激。

如何查询 json 子对象并返回整个父对象

我猜你正在寻找 Json.NET SelectToken

在您的情况下:

var o = JObject.Parse("{'theFamilies': [{'parent1': 'Joe','parent2': 'Mary','child1': 'Andy'}, {'parent1': 'Bob','parent2': 'Mary','child1': 'Mark'}]}");
var res = o.SelectToken("theFamilies[0].parent2");

UPD对于所有令牌,您应该使用选择令牌

var res = o.SelectTokens("theFamilies[*].parent2");
您的数据

似乎是Family对象的数组。可以为此创建一个 poco,并在将 json 反序列化为 C# 类型后使用 LINQ 选择匹配项。可以使用类似以下内容的内容 -

        var t = JsonConvert.DeserializeObject<Families>("json");
        var match = t.theFamilies.Where(a => a.parent2 == "Mary").ToList();
        public class Families
        {
            public List<Family> theFamilies { get; set; }
        }
        public class Family
        {
            public string parent1 { get; set; }
            public string parent2 { get; set; }
            public string child1 { get; set; }
        }