Основной принцип работы интернета — обмен данными. Они бывают разных видов, например файл, строка или число. Есть структура данных, с которой можно быстро и просто воссоздавать объекты и обмениваться этими данными по сети, — JSON.
JSON в Python
JSON — это строка со словарем. Это байтовая последовательность. Вы можете отправить строку по сети приложению, а в нём воссоздать полученную структуру в объекты языка.
💡 Пример JSON:
Структура JSON
JSON работает на двух основных структурах:
- Коллекции пар «ключ — значение» (аналогично словарям в Python):
12345
{
"name"
:
"Alice"
,
"age"
:
30
,
"is_student"
: false
}
Ключи должны быть строками — в двойных кавычках «». Значения могут быть строками, числами, булевыми (true/false), null, массивами или другими объектами.
- Упорядоченные списки значений (аналогично спискам в Python):
[«apple», «banana», «cherry»].
В массивах могут быть любые допустимые JSON-значения, в том числе вложенные объекты и массивы.
Пример сложной структуры:1234567891011{
"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-объект:
1 2 3 | import json json_str = '{"name": "Alice", "age": 25}' data = json.loads(json_str) # → {'name': 'Alice', 'age': 25} |
Запись JSON в строку
Метод json.dumps() преобразует Python-объект в JSON-строку:
1 2 | data = { "name" : "Bob" , "is_active" : True } json_str = json.dumps(data) # → '{"name": "Bob", "is_active": true}' |
Загрузка JSON из файла
Чтение JSON из файла с помощью json.load():
1 2 | with open ( "data.json" , "r" , encoding = "utf-8" ) as file : data = json.load( file ) |
Запись JSON в файл
Сохранить Python-объект в файл в формате JSON — json.dump() — можно так:
1 2 3 | 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:1234567891011json_data
=
'''
{
"name": "Alex",
"age": 35,
"married": false,
"children": ["Mia", "Tom"]
}
'''
# Десериализация в Python-словарь
python_dict
=
json.loads(json_data)
print
(python_dict)
Вывод:
123456{
'name'
:
'Alex'
,
'age'
:
35
,
'married'
:
False
,
'children'
: [
'Mia'
,
'Tom'
]
}
- Работа с файлами.
1234567
# Запись 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 или свою реализацию «Адаптера».
Добавить комментарий