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

时间:2016-02-29 11:28:11

标签: c# json json.net

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

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

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

如果......嵌套更深?是否有一种避免/忽略嵌套深度的好方法,并递归地获得满足不需要任何编码更改的条件的所有条件?

任何有关每种解决方案的好处或损害的评论都将受到特别赞赏。

2 个答案:

答案 0 :(得分:1)

我猜您正在寻找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 对于所有令牌,您应该使用SelectTokens

var res = o.SelectTokens("theFamilies[*].parent2");

答案 1 :(得分:-2)

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

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