Получить корневые элементы JSON, содержащие внутренние элементы

Обновлено: он не должен выводить «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, потому что у него нет внутренних элементов.

Как бы вы это сделали с лупами for?

timgeb 27.11.2018 13:48

В настоящее время у меня есть базовые знания о Python. Я знаю, как создать диктант и как получить доступ к определенным элементам. Однако я понятия не имею, как найти корневые элементы без жесткого кодирования. Поэтому выложил на переполнение стека.

Chiel 27.11.2018 13:57

Возможный дубликат Извлечь все ключи из списка словарей

Kunal Mukherjee 27.11.2018 14:17

Этот вопрос отличается тем, что он также требует синтаксического анализа имен внутренних элементов.

Chiel 27.11.2018 14:21
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
442
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Что-то вроде этого? Возможно, это не оптимальное решение.

#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']

Другие вопросы по теме