Основной принцип работы интернета — обмен данными. Они бывают разных видов, например файл, строка или число. Есть структура данных, с которой можно быстро и просто воссоздавать объекты и обмениваться этими данными по сети, — JSON.
JSON в Python
JSON — это строка со словарем. Это байтовая последовательность. Вы можете отправить строку по сети приложению, а в нём воссоздать полученную структуру в объекты языка.
💡 Пример JSON:
Структура JSON
JSON работает на двух основных структурах:
- Коллекции пар «ключ — значение» (аналогично словарям в Python):
{ "name": "Alice", "age": 30, "is_student": false }
Ключи должны быть строками — в двойных кавычках «». Значения могут быть строками, числами, булевыми (true/false), null, массивами или другими объектами.
- Упорядоченные списки значений (аналогично спискам в Python):
[«apple», «banana», «cherry»].
В массивах могут быть любые допустимые JSON-значения, в том числе вложенные объекты и массивы.
Пример сложной структуры:{ "user": { "id": 1, "name": "John Doe", "roles": ["admin", "editor"], "metadata": { "created_at": "2023-01-01", "active": true } } }
В Python JSON выглядит как:
- объекты → dict;
- массивы → list;
- строки → str;
- числа → int или float;
- true/false → True/False;
- null → None.
Нужно понимать структуры JSON, чтобы корректно работать с методами:
- json.loads() — чтение JSON;
- json.dumps() — запись JSON.
Основные операции с JSON в Python
С JSON в Python работают с помощью встроенного модуля json, он дает простые и удобные методы, чтобы преобразовать данные между JSON-форматом и Python-объектами. В этом блоке рассмотрим ключевые операции. С ними можно интегрировать JSON в ваши программы, например в обработку API-ответов, конфигурационных файлов или данных веб-приложений.
Загрузка JSON из строки
Используйте json.loads(), чтобы преобразовать JSON-строку в Python-объект:
import json json_str = '{"name": "Alice", "age": 25}' data = json.loads(json_str) # → {'name': 'Alice', 'age': 25}
Запись JSON в строку
Метод json.dumps() преобразует Python-объект в JSON-строку:
data = {"name": "Bob", "is_active": True} json_str = json.dumps(data) # → '{"name": "Bob", "is_active": true}'
Загрузка JSON из файла
Чтение JSON из файла с помощью json.load():
with open("data.json", "r", encoding="utf-8") as file: data = json.load(file)
Запись JSON в файл
Сохранить Python-объект в файл в формате JSON — json.dump() — можно так:
data = {"key": "value"} with open("output.json", "w", encoding="utf-8") as file: json.dump(data, file, indent=4) # indent для красивого форматирования
Сериализация и десериализация
В Python много библиотек, чтобы работать с JSON, но мы рассмотрим встроенную библиотеку JSON Python. С ней можно приводить любые структуры данных к JSON-объекту — вплоть до пользовательских классов. А из него получать совместимую для работы в Python сущность — объект языка.
Разобраться в Python вы сможете на курсе «Python-разработчик». Преподаватели объяснят все нюансы доступным языком, а вы выполните практические задания. Например, разработаете виджет банковских операций. После учебы у вас будет готовое портфолио и диплом о профессиональной переподготовке.
Упаковка объектов в байтовую последовательность называется сериализацией, а распаковка байтов в объекты языка программирования, приведение последовательности назад к типам и структурам — десериализацией.
Нужно переводить данные в байты, чтобы отправлять их по сети или локально другому приложению: другой формат передать невозможно. Вот так преобразовывают данные из объектов Python в JSON и обратно:
Функции
С Dumps можно создать JSON-строку из переданного в нее объекта. С Loads — преобразовать строку назад в объекты языка.
Dump и load используют, чтобы сохранить результат в файл или воссоздать объект. Работают они похожим образом, но нужно передавать специальный объект для работы с файлом — filehandler.
Примеры
Вот несколько примеров сериализации и десериализации:
- Сериализация (Python → JSON).
Преобразование объектов Python в JSON-формат:
import json
# Python-словарь
data = {
"name": "Anna",
"age": 28,
"courses": ["Math", "Physics"],
"is_student": True,
"graduated": None
}
# Сериализация в JSON-строку
json_str = json.dumps(data, indent=4) # indent для красивого форматирования
print(json_str)Вывод:
{
"name": "Anna",
"age": 28,
"courses": ["Math", "Physics"],
"is_student": true,
"graduated": null
} - Десериализация (JSON → Python).
Преобразование JSON-строки обратно в объект Python:json_data = ''' { "name": "Alex", "age": 35, "married": false, "children": ["Mia", "Tom"] } ''' # Десериализация в Python-словарь python_dict = json.loads(json_data) print(python_dict)
Вывод:
{ 'name': 'Alex', 'age': 35, 'married': False, 'children': ['Mia', 'Tom'] }
- Работа с файлами.
# Запись JSON в файл (сериализация) with open("user.json", "w") as file: json.dump(data, file, indent=2) # Чтение JSON из файла (десериализация) with open("user.json", "r") as file: loaded_data = json.load(file) print(loaded_data)
Как работать с пользовательскими объектами
Пользовательские классы не относятся к JSON-сериализуемым. Это значит, что просто применить к ним функции dumps, loads или dump и load не получится:
🚀 Написать функцию
Чтобы сериализовать пользовательский объект в JSON-структуру данных, нужен аргумент default. Указывайте вызываемый объект, то есть функцию или статический метод.
Чтобы получить аргументы класса с их значениями, нужна встроенная функция __dict__, потому что любой класс — это словарь со ссылками на значения по ключу.
Чтобы сериализовать аргументы класса и их значения в JSON, напишите функцию:
Но можно создать отдельную функцию и указать ее как аргумент:
❗ Мы добавили название класса в получаемую структуру. Так можно безошибочно понять, сущность какого класса десериализовать в объект.
Более подробно писать функции вы научитесь на курсе «Python-разработчик». А еще сами сделаете сервис проверки файлов с возможностью регистрации, отправки уведомлений и формирования отчета о задачах.
🚀 Создать расширение классов
Такого же результата добьетесь, если примените расширения специальных классов библиотеки:
Такой подход можно использовать и тогда, когда класс состоит из нескольких других.
🚀 Применить паттерн «Адаптер»
Идея в том, чтобы написать класс, который приводит к JSON пользовательские объекты и восстанавливает их. Определите класс фигуры, формы и цвета:
Напишите класс, который будет приводить объекты фигуры к JSON, а из JSON воссоздавать полученный объект:
Протестируйте решение:
Вывод терминала:
Отображение объектов:
Отображение JSON:
Отображение восстановленных объектов:
Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами разработки для ответов на вопросы и разбора домашек.
Главное о работе с JSON в Python
- JSON — это стандарт обмена данными. С ним легко сериализовать и десериализовать объекты.
- Стандарт часто применяют, когда разрабатывают API и веб-приложения.
- Для сериализации и десериализации объектов в строку или из строки используйте функции json.dumps и json.loads. Из файлов — json.dump и json.load.
- Сериализовать можно любую пользовательскую структуру. Для этого создайте функцию, напишите расширение классов JSONEncoder/JSONDecoder или свою реализацию «Адаптера».
Добавить комментарий