Привет, у меня есть некоторый json, который немного неудобен из-за его вложенного/динамического характера.
Это выглядит примерно так, как показано ниже. Извините, если немного не так. Я пытаюсь создать словарь, например Dictionary <string, Dictionary<string,long>>
, где каждое значение даты является первым ключом, а item1 — вторым ключом и т. д.
xyz {
xyzcharacteristic1{
"2022/10/01": {
"item1": 0000,
"item4": 11111,
"item2": 33333,
"item3": 33333,
}
"2022-09-05": {
"item2": 0000,
"item1": 11111,
"item3": 22222,
"item4": 22222,
}...
}, xyzcharacteristic2{...}, xyzcharacteristic3{...}
xyy {
xyycharacteristic1{...}...
}
Я попытался разобрать его, используя несколько методов, которые я видел при переполнении стека, но я просто не могу получить доступ к ключу/значению по отдельности.
string json = r.ReadToEnd();
var rss = JObject.Parse(json);
var dates= ((JObject)rss["xyz"]["xyzcharacteristic1"]).Properties();
}
foreach (var item in dates)
{
Console.WriteLine(item);
}
спасибо сводило меня с ума, что я не мог получить доступ к ключу/значению
@SergeyKalinichenko - Можешь нормально ответить?
@vernou Это слишком маленький ответ, но я полагаю, что он может быть полезен людям, которые ищут его в Интернете, поэтому, думаю, я должен добавить его. Спасибо!
Вы можете продолжать «распаковывать» значения по мере их прохождения в цикле, например:
foreach (var inner in ((JObject)item.Value)) {
Console.WriteLine(inner);
}
если вы хотите написать все внутренние свойства, вам нужен двойной цикл foreach
var rss = JObject.Parse(json);
var dates = ((JObject)rss["xyz"]["xyzcharacteristic1"]).Properties();
foreach (var item in dates)
{
Console.WriteLine($"---- {item.Name} ----");
foreach (var prop in ((JObject)item.Value).Properties())
Console.WriteLine($"{prop.Name} : {prop.Value}");
}
выход
---- 2022/10/01 ----
item1 : 0
item4 : 11111
item2 : 33333
item3 : 33333
---- 2022-09-05 ----
item2 : 0
item1 : 11111
item3 : 22222
item4 : 22222
Попробуйте
foreach (var inner in ((JObject)item.Value)) { Console.WriteLine(inner); }
вместоConsole.WriteLine(item);