Как ходить по древу JSON? (Python)

Цель: вывести из всех элементов (entities) поля "subject" --> "name" + "number" из json запроса

Отрывок запроса:

{
  "entities": [
    {
      "school": {
        "id": 254044,
        "name": "МАОУ \"Учебное заведение №1\" г.Города"
      },
      "subject": {
        "id": 1470,
        "name": "Основы безопасности жизнедеятельности",
        "sysname": "OBJ"
      },
      "number": 1
    },
    {
      "school": {
        "id": 254044,
        "name": "МАОУ \"Учебное заведение №1\" г.Города"
      },
      "subject": {
        "id": 1133,
        "name": "Математика",
        "sysname": "Mt"
      },
      "number": 2
    }
  ],
  "totalCount": 32
}

То есть, вывод должен быть:

1. Основы безопасности жизнедеятельности
2. Математика

Застрял на этом этапе проекта, гуглил до невозможности, help me please :)


Ответы (1 шт):

Автор решения: nomnoms12

Вы можете воспольховаться методом json.loads для преобразования JSON в объект Python. Объект вы можете "обойти" с помощью индексации и цикла for:

import json

s = r'{"entities":[{"school":{"id":254044,"name":"МАОУ \"Учебное заведение №1\" г.Города"},"subject":{"id":1470,"name":"Основы безопасности жизнедеятельности","sysname":"OBJ"},"number":1},{"school":{"id":254044,"name":"МАОУ \"Учебное заведение №1\" г.Города"},"subject":{"id":1133,"name":"Математика","sysname":"Mt"},"number":2}],"totalCount":32}'
tree = json.loads(s)

for entity in tree['entities']:
    number = entity['number']
    name = entity['subject']['name']
    print(f'{number}. {name}')

stdout:

1. Основы безопасности жизнедеятельности
2. Математика
→ Ссылка