Как можно выбрать все дочерние объекты в объекте JSON? Например, у нас есть объект JSON, который содержит все организационные единицы компании, и мы хотим выбрать все организационные единицы, названия которых начинаются с буквы А.
Я не смог найти решения, которое рекурсивно выбирает все дочерние объекты, как в методе 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": []
}
]
}
]
}
]
}
да, это С#, и да, я пытался искать через stackoverflow, но не смог найти ничего столь же простого, как метод xml selectNodes.
Вы можете использовать запрос 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
С#? Тогда попробуйте Линк. Вы пробовали что-нибудь? В противном случае прочтите Как спросить.