0Pricing
Python Academy · Урок

Работа с вложенными структурами JSON

Перемещайтесь по сложным вложенным объектам JSON и преобразуйте их.

«Работа с вложенными структурами JSON» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Введение

В реальных данных JSON часто имеет глубокую вложенность. Умение обращаться к вложенным структурам, преобразовывать и проверять их крайне важно.

Доступ к вложенным ключам

data['user']['address']['city'] выполняет переход по вложенным словарям. Используйте .get() на каждом уровне, чтобы обработать отсутствующие ключи.
import json
data = {'user': {'address': {'city': 'NYC', 'zip': '10001'}}}
print(data['user']['address']['city'])

Безопасный доступ к вложенным данным

data.get('user', {}).get('address', {}).get('city') безопасно объединяет вызовы .get().
data = {'user': {'name': 'Alice'}}
city = data.get('user', {}).get('address', {}).get('city', 'unknown')
print(city)

Перебор массивов объектов

Массивы объектов JSON представляют собой списки словарей. Перебирайте их с помощью цикла for.
import json
data = json.loads('[{"name":"Alice"},{"name":"Bob"}]')
for user in data:
    print(user['name'])

Выравнивание вложенного JSON

Напишите рекурсивную функцию, которая преобразует вложенные словари в плоский словарь с ключами, разделёнными точками.
def flatten(d, prefix=''):
    result = {}
    for k, v in d.items():
        key = f'{prefix}.{k}' if prefix else k
        if isinstance(v, dict):
            result.update(flatten(v, key))
        else:
            result[key] = v
    return result
print(flatten({'a': {'b': {'c': 1}}, 'd': 2}))

Фильтрация массивов

[user for user in data if user.get('active')] фильтрует массив JSON по условию.
data = [{'name':'A','active':True},{'name':'B','active':False}]
active = [u for u in data if u.get('active')]
print(active)

Преобразование вложенных данных

Извлеките поле из каждого вложенного объекта: [item['name'] for item in data]
data = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}]
names = [d['name'] for d in data]
print(names)

Проверка схемы с помощью jsonschema

pip install jsonschema. jsonschema.validate(instance, schema) вызывает ValidationError для недопустимых данных.
# from jsonschema import validate
# schema = {'type':'object','required':['name']}
# validate({'name':'Alice'}, schema)  # OK
# validate({}, schema)  # raises ValidationError
print('schema validation demo')

Глубокое обновление вложенных словарей

Поверхностный dict.update() не объединяет вложенные словари. Напишите рекурсивную функцию deep_update для глубокого объединения.
def deep_update(base, override):
    for k, v in override.items():
        if isinstance(v, dict) and isinstance(base.get(k), dict):
            deep_update(base[k], v)
        else:
            base[k] = v
    return base
result = deep_update({'a': {'x': 1}}, {'a': {'y': 2}})
print(result)

Запросы в стиле jq с Python

Для сложных запросов используйте библиотеку jq или пользовательский рекурсивный поиск: find_all(data, 'key').
def find_all(obj, key):
    if isinstance(obj, dict):
        if key in obj: yield obj[key]
        for v in obj.values(): yield from find_all(v, key)
    elif isinstance(obj, list):
        for item in obj: yield from find_all(item, key)
data = {'a': {'name': 'x'}, 'b': [{'name': 'y'}]}
print(list(find_all(data, 'name')))

Сериализация в NDJSON

JSON с разделителями-новыми строками (NDJSON): один объект JSON в строке. Записывайте с помощью json.dumps(obj) + '\n'.
import json
objects = [{'id': 1}, {'id': 2}, {'id': 3}]
ndjson = '\n'.join(json.dumps(o) for o in objects)
print(ndjson)

Быстрая проверка

Что возвращает data.get('key', {}).get('nested'), если отсутствует 'key'?

Повторение

Вложенный JSON: объединяйте вызовы .get() в цепочку для безопасного доступа. Перебирайте массивы с помощью for. Разворачивайте вложенность рекурсией. Фильтруйте с помощью включения списков. Используйте jsonschema для проверки.

Продолжайте

Так держать! Переходите к следующему уроку.

Часто задаваемые вопросы

Урок «Работа с вложенными структурами JSON» бесплатный?

Да — полный текст урока «Работа с вложенными структурами JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Работа с вложенными структурами JSON»?

Перемещайтесь по сложным вложенным объектам JSON и преобразуйте их. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Работа с вложенными структурами JSON»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Кодирование и декодирование JSON
  2. Работа с вложенными структурами JSON
  3. Чтение CSV с помощью csv.reader
  4. Запись CSV с помощью csv.DictWriter
← Назад к Python Academy