Привет! JSON — это самый популярный формат обмена данными в веб-разработке. Он используется в API, конфигурациях, хранении данных. В Python работать с JSON очень просто благодаря встроенному модулю json.
В этой статье мы разберём:
- Что такое JSON
- Структура JSON
- Типы данных в JSON
- Модуль json в Python
- Сериализация и десериализация
- Работа с файлами JSON
- Что нужно знать перед началом
- Основная часть
- Что такое JSON
- Структура JSON
- Типы данных в JSON
- Модуль json в Python
- Сериализация (json.dumps())
- Десериализация (json.loads())
- Работа с JSON-файлами
- Объекты с кастомными типами
- Пример из реальной жизни
- Задачи для закрепления
- Нюансы и подводные камни
- Частые ошибки и как их избежать
- Ошибка 1: Попытка сериализовать datetime
- Ошибка 2: Неправильная работа с файлами
- Ошибка 3: Путаница между json.dumps() и json.dump()
- Шпаргалка
- Заключение
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Python
- Базовое понимание словарей и списков
Совет: JSON — это текстовый формат, который легко читается и человеком, и машиной.
Основная часть
Что такое JSON
JSON (JavaScript Object Notation) — это лёгкий формат обмена данными. Он основан на синтаксисе JavaScript, но не зависит от языка.
JSON-данные — это всегда строка.
Совет: JSON похож на словари Python, но со своими правилами.
Структура JSON
JSON поддерживает две основные структуры:
1. Объект (аналог словаря Python):
{
"name": "Анна",
"age": 25,
"is_active": true
}2. Массив (аналог списка Python):
["apple", "banana", "cherry"]Типы данных в JSON
| JSON | Python |
|---|---|
string | str |
number | int / float |
true / false | True / False |
null | None |
array | list |
object | dict |
Модуль json в Python
Основные функции:
| Функция | Назначение |
|---|---|
json.dumps() | Превращает Python-объект в JSON-строку |
json.loads() | Превращает JSON-строку в Python-объект |
json.dump() | Записывает JSON-строку в файл |
json.load() | Читает JSON из файла |
Сериализация (json.dumps())
Превращает Python-объект в JSON-строку.
import json
data = {
"name": "Анна",
"age": 25,
"is_active": True,
"scores": [95, 87, 92],
"address": None
}
json_string = json.dumps(data, ensure_ascii=False, indent=4)
print(json_string)Результат:
{
"name": "Анна",
"age": 25,
"is_active": true,
"scores": [95, 87, 92],
"address": null
}Совет:
ensure_ascii=False— для поддержки русского языка.indent=4— для красивого форматирования.
Десериализация (json.loads())
Превращает JSON-строку в Python-объект.
import json
json_string = '{"name": "Анна", "age": 25, "is_active": true}'
data = json.loads(json_string)
print(data)
print(type(data)) # <class 'dict'>
print(data["name"]) # АннаРабота с JSON-файлами
Запись в файл:
import json
data = {
"name": "Анна",
"age": 25,
"city": "Москва"
}
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent=4)Чтение из файла:
import json
with open("data.json", "r", encoding="utf-8") as file:
data = json.load(file)
print(data)Объекты с кастомными типами
import json
from datetime import datetime
# Создаём объект
data = {
"name": "Анна",
"created_at": datetime.now()
}
# Ошибка! datetime не сериализуется
# json.dumps(data)
# Решение: преобразуем в строку
def serialize_datetime(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError(f"Объект {obj} не сериализуем")
json_string = json.dumps(data, default=serialize_datetime, indent=4)
print(json_string)Пример из реальной жизни
API-клиент:
import json
import requests
# Отправка JSON
def create_user(name, age, city):
data = {
"name": name,
"age": age,
"city": city
}
response = requests.post(
"https://api.example.com/users",
json=data
)
return response.json()
# Получение JSON
response = requests.get("https://api.example.com/users")
users = response.json()
print(users)
# Сохранение в файл
with open("users.json", "w") as file:
json.dump(users, file, indent=4)
# Чтение из файла
with open("users.json", "r") as file:
users = json.load(file)Задачи для закрепления
Задача 1. Преврати словарь {"name": "Иван", "age": 30} в JSON-строку.
Задача 2. Преврати JSON-строку '{"city": "Москва", "temp": 22.5}' в словарь.
Задача 3. Запиши словарь в JSON-файл.
Задача 4. Прочитай JSON-файл.
Задача 5. Что произойдёт, если попытаться сериализовать datetime?
Ответы:
Задача 1.
import json
data = {"name": "Иван", "age": 30}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str) # {"name": "Иван", "age": 30}Задача 2.
json_str = '{"city": "Москва", "temp": 22.5}'
data = json.loads(json_str)
print(data) # {'city': 'Москва', 'temp': 22.5}Задача 3.
with open("data.json", "w", encoding="utf-8") as file:
json.dump(data, file, ensure_ascii=False, indent=4)Задача 4.
with open("data.json", "r", encoding="utf-8") as file:
data = json.load(file)Задача 5.
# Будет ошибка TypeErrorНюансы и подводные камни
- JSON поддерживает только строки, числа, булевы, null, массивы и объекты.
- Python-объекты (datetime, set, Decimal) не сериализуются по умолчанию.
json.dumps()сериализует,json.loads()десериализует.json.dump()иjson.load()работают с файлами.ensure_ascii=False— для поддержки Unicode.indent— для красивого форматирования.- Кастомные типы требуют обработки через
defaultили кастомные кодировщики.
Частые ошибки и как их избежать
Ошибка 1: Попытка сериализовать datetime
Используй default параметр или преобразуй в строку.
Ошибка 2: Неправильная работа с файлами
Используй with open() для безопасной работы.
Ошибка 3: Путаница между json.dumps() и json.dump()
dumps() — в строку, dump() — в файл.
Шпаргалка
| Что нужно | Как пишется |
|---|---|
| Сериализация | json.dumps(data) |
| Десериализация | json.loads(json_str) |
| Запись в файл | json.dump(data, file) |
| Чтение из файла | json.load(file) |
| Красивое форматирование | indent=4 |
| Поддержка Unicode | ensure_ascii=False |
Заключение
Сегодня мы:
- Узнали, что такое JSON
- Изучили структуру и типы данных
- Научились работать с модулем json
- Примеры сериализации и десериализации








