在JSON对象中递归选择子对象

问题描述 投票:0回答:1

如何在JSON对象中选择所有子对象?例如,我们有一个JSON对象,其中包含公司的所有组织单位,我们希望选择以字母A开头的所有组织单位。

我找不到像XPath的SelectNodes方法那样递归选择所有子对象的任何解决方案。

{
  "orgname": "Org A",
  "subOrgs": [
    {
      "orgname": "Org B",
      "subOrgs": [
        {
          "orgname": "Org A",
          "subOrgs": [
            {
              "orgname": "Org B",
              "subOrgs": []
            },
            {
              "orgname": "Org C1",
              "subOrgs": []
            }
          ]
        },
        {
          "orgname": "Org A1",
          "subOrgs": [
            {
              "orgname": "Org B2",
              "subOrgs": []
            },
            {
              "orgname": "Org C1",
              "subOrgs": []
            }
          ]
        }
      ]
    },
    {
      "orgname": "Org C",
      "subOrgs": [
        {
          "orgname": "Org A4",
          "subOrgs": [
            {
              "orgname": "Org B2",
              "subOrgs": []
            },
            {
              "orgname": "Org C3",
              "subOrgs": []
            }
          ]
        },
        {
          "orgname": "Org A5",
          "subOrgs": [
            {
              "orgname": "Org B4",
              "subOrgs": []
            },
            {
              "orgname": "Org C2",
              "subOrgs": []
            }
          ]
        }
      ]
    }
  ]
}
c# json.net
1个回答
0
投票

你可以像这样使用LINQ-to-JSON查询:

var orgs = JObject.Parse(json);

var orgsStartingWithA = 
    orgs.DescendantsAndSelf()
        .OfType<JObject>()
        .Where(t => t["orgname"] != null && t["orgname"].Value<string>().StartsWith("Org A"))
        .ToList();

foreach (var org in orgsStartingWithA)
{
    Console.WriteLine(org["orgname"]);
}

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

© www.soinside.com 2019 - 2024. All rights reserved.