Обновлено: он не должен выводить «notThis», потому что у него нет внутренних элементов.
Обновлено: этот пост не является дубликатом, поскольку он запрашивает синтаксический анализ внутренних элементов и запрашивает только синтаксический анализ элементов без внутренних элементов.
Я хотел бы поместить корневые элементы массива JSON в отдельный массив. Таким образом, я также хотел бы разобрать имена его внутренних элементов и поместить их в массив с массивами внутренних элементов.
См. Следующий пример:
[
{
"firstRoot": {
"firstInner1": "test",
"secondInner1": "test"
}
},
{
"secondRoot": {
"firstInner2": "test",
"secondInner2": "test"
}
},
{
"thirdRoot": {
"firstInner3": "test",
"secondInner3": "test"
}
}, {"notThis" : "test"}
]
Желаемый результат: Массив с именами всех корневых элементов:
["firstRoot", "secondRoot", "thirdRoot"]
некоторые массивы с внутренними элементами:
[["firstInner1","secondInner1"],["firstInner2","secondInner2"],["firstInner3","secondInner3"]]
Итак, без элемента notThis, потому что у него нет внутренних элементов.
В настоящее время у меня есть базовые знания о Python. Я знаю, как создать диктант и как получить доступ к определенным элементам. Однако я понятия не имею, как найти корневые элементы без жесткого кодирования. Поэтому выложил на переполнение стека.
Возможный дубликат Извлечь все ключи из списка словарей
Этот вопрос отличается тем, что он также требует синтаксического анализа имен внутренних элементов.






Что-то вроде этого? Возможно, это не оптимальное решение.
#Load JSON
json_str = '[{"firstRoot":{"firstInner1":"test","secondInner1":"test"}},{"secondRoot":{"firstInner2":"test","secondInner2":"test"}},{"thirdRoot":{"firstInner3":"test","secondInner3":"test"}}]'
dic = json.loads(json_str)
#Output arrays
root_ele = []
inner_ele = []
#Parse JSON
for i in dic:
root_ele.append(list(i.keys())[0])
y = [k for j in list(i.values()) for k, l in j.items()]
inner_ele.append(y)
#Print output
print(root_ele)
print(inner_ele)
Вывод:
['firstRoot', 'secondRoot', 'thirdRoot']
[['firstInner1', 'secondInner1'], ['firstInner2', 'secondInner2'], ['firstInner3', 'secondInner3']]
Я бы сопоставил лямбду с записями json:
json_dict = {...}
list(map(lambda j: list(j.keys())[0], json_dict))
# ['firstRoot', 'secondRoot', 'thirdRoot']
Как бы вы это сделали с лупами
for?