У меня есть «база данных» Json, и я пытаюсь извлечь из него содержимое с помощью Newtonsoft Json.Net LINQ.Правильный синтаксис для запроса LINQ to JSON с вложенными массивами
Целью является извлечение свойства из элементов в дочернем массиве, содержащемся в элементе в родительском массиве. Элемент в родительском массиве будет выбран с помощью свойства ключа. «Внешний» элемент представляет собой массив с одной записью, «внутренний» элемент представляет собой массив из двух родительских записей, каждый из которых имеет «ключ» и массив дочерних элементов ». Глядя на соответствие внутреннему родительскому элементу по его ключу, а затем извлечь дочерние «itemid» свойства всех элементов в дочернем массиве в IList.
file at filePath contains:
{
"outer":
[
{
"inner":
[
{
"key": "AAA",
"items":
[
{ "itemid": "a1" }
]
},
{
"key": "BBB",
"items":
[
{ "itemid": "b1" },
{ "itemid": "b2" }
]
}
]
}
]
}
Я думаю запрос экстракция будет выглядеть примерно так, как показано ниже, но ни это, ни любой из десятков вариаций этого я попытался не увенчались успехом. В некоторых вариантах он, кажется, работает вплоть до окончательного выбора правильных внутренних «элементов», но затем разваливается на меня при попытке выкопать массив «itemid». Какие-нибудь подсказки, что здесь не так? Я хочу разделить это на два отдельных запроса, если это необходимо.
public IList<string> FindMatchingItems(string filePath, string id)
{
JObject JsonLinq = JObject.Parse(File.ReadAllText(filePath));
return JsonLinq["outer"].First()["inner"].Children()
.First(inner => inner["key"].ToString() == id)
.Select(selected => selected["items"].Children()["itemid"].ToString())
.ToList();
}
void Query(string filePath)
{
var ayes = FindMatchingItems(filePath, "AAA");
// ayes contains [] { "a1" }
var bees = FindMatchingItems(filePath, "BBB");
// bees contains [] { "b1", "b2" }
}
Отлично, спасибо! Я бы проигнорировал Select ** Many ** в каждой попытке –
@BrianKretzler: Нет проблем. Я все еще работаю над тем, почему вызов 'Select' вызывал прямую ошибку (это для меня в любом случае). –