首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq- to -JSON查询,以在分层JSON结构中查找特定属性的兄弟级

Linq- to -JSON查询,以在分层JSON结构中查找特定属性的兄弟级
EN

Stack Overflow用户
提问于 2016-10-28 05:53:15
回答 1查看 1.1K关注 0票数 4

给定以下JSON:

代码语言:javascript
复制
{
  "Data": {
    "SPECIAL": "QQ01",
    "AA": "QQ",
    "BB": "QQ",
    "Data": [
      {
        "SPECIAL": "QQ02",
        "AA": "QQ",
        "BB": "QQ",
        "CC": "QQ",
        "Data": [
          {
            "SPECIAL": "QQ03",
            "AA": "QQ",
            "CC": "QQ",
            "Data": [
              {
                "SPECIAL": "QQ04",
                "AA": "QQ",
                "CC": "QQ",
                "Data": [
                  {
                    "SPECIAL": "QQ05",
                    "AA": "QQ",
                    "CC": "QQ",
                    "Data": [
                      {
                        "SPECIAL": "QQ06",
                        "AA": "QQ",
                        "CC": "QQ"
                      }
                    ]
                  },
                  {
                    "SPECIAL": "QQ07",
                    "AA": "QQ",
                    "CC": "QQ",
                    "DD": "QQ",
                    "Data": [
                      {
                        "SPECIAL": "QQ08",
                        "AA": "QQ",
                        "CC": "QQ",
                        "Data": [
                          {
                            "SPECIAL": "QQ09",
                            "AA": "QQ",
                            "BB": "QQ",
                            "CC": "QQ"
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

我认为我理解JSON属性只是一个名称/值对,其中名称是一个字符串,值可以是一个字符串、一个JArray或一个JObject。如果我是正确的,上面的示例JSON将打开一个包含3个同级属性的数据JObject : SPECIAL、AA和BB。

注意,下一个数据输入是JArray。数组的第一个元素包含一个具有4个属性的对象: SPECIAL、AA、BB和CC。

问题:如何发出Linq查询以返回与QQ01相同的特殊的同级属性?返回值应该是一个JProperty列表,其中只包含:SpecialQ01、AA:QQ和BB:QQ。注意,这些属性位于JObject中。

如果我希望特殊的4个同级属性与QQ02相等,同样的查询将需要工作。在这种情况下,返回值将是只包含: JProperty :QQ 02、AA:QQ、BB:QQ和CC:QQ的列表。请注意,这些属性位于位于JObject中的JArray中。

哦,如果有多个条目特别等于QQ01,或者,在第二种情况下,特别等于QQ02--那么我只想要第一个条目。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 06:25:15

我会这样做:

代码语言:javascript
复制
JObject jo = JObject.Parse(json);

var props = jo.Descendants()
    .OfType<JProperty>()
    .Where(p => p.Name == "SPECIAL" && (string)p.Value == "QQ01")
    .Take(1)
    .Select(p => p.Parent)
    .SelectMany(o => o.Children<JProperty>())
    .Where(p => p.Value.Type == JTokenType.String)
    .ToList();

foreach (JProperty prop in props)
{
    Console.WriteLine(prop.Name + ": " + prop.Value);
}

小提琴:https://dotnetfiddle.net/nvIXkO

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40298859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档