Чтение и запись JSON в Python
Кратко
JSON — лёгкий формат обмена данными. В Python вы быстро сохраняете словари и списки в файл и обратно. Ниже — практические примеры, шаблоны и рекомендации по безопасности.

Зачем использовать JSON с Python
JSON (JavaScript Object Notation) — текстовый формат для хранения и передачи структурированных данных. Он кроссплатформенный и читается большинством языков. В Python JSON обычно используется для сохранения настроек, обмена данными через API и быстрой сериализации объектов простых типов.
Важно: JSON хранит только простые типы (строки, числа, булевы, массивы, объекты, null). Сложные объекты нужно предварительно преобразовать.
Как записать напрямую в JSON-файл
Python предоставляет встроенную библиотеку json. Между Python-словарём и JSON-объектом разница минимальна, поэтому сериализация простая.
Пример простого словаря в файл:
import json
data = {"MUO":"Media", "Google":"Search", "Python":"Language"}
with open("myfile.json", "w") as j:
json.dump(data, j)
Пример вложённой структуры (словарь с массивом):
import json
data = {"Sites":[{"MUO":"Media", "Google":"Search", "Python":"Language"}]}
with open("myfile.json", "w") as j:
json.dump(data, j)
Совет по форматированию для удобочитаемости и поддержки Unicode:
with open("myfile.json", "w", encoding="utf-8") as j:
json.dump(data, j, ensure_ascii=False, indent=2)Как сохранить список в JSON в Python
Если у вас список, часто удобнее сначала преобразовать его в словарь. Ниже — несколько подходов.
Преобразование списка пар в словарь:
import json
data = ["MUO", "Media", "Google", "Search", "Python", "Language"]
data = {data[i]:data[i+1] for i in range(0, len(data), 2)} #convert data into a dictionary
with open("myfile.json", "w") as j:
json.dump(data, j)
Объединение двух списков в словарь (ключи и значения):
import json
data = ["MUO", "Google", "Python"]
data2 = ["Media", "Search", "Language"]
outputData = {data[i]:data2[i] for i in range(len(data))} #merge the two lists into a dictionary
with open("myfile.json", "w") as j:
json.dump(outputData, j)
Примечание: если длина списков не совпадает, код выше выдаст IndexError или потеряет данные. Всегда проверяйте длины перед объединением.
Как получить доступ к данным JSON
Чтение JSON-файла и получение конкретных значений очень просты.
import json
with open("test.json", "r") as j:
mydata = json.load(j)
print(mydata) Вывод: {‘MUO’: ‘Media’, ‘Google’: ‘Search’, ‘Python’: ‘Language’}
Получение определённого поля:
with open("test.json", "r") as j:
mydata = json.load(j)
print(mydata["MUO"]) Вывод: Media
Быстрые запросы и производительность
JSON лёгкий и быстрый для сериализации/десериализации простых структур. На больших объёмах данных обратите внимание на:
- потоковую обработку (чтение/запись по частям),
- использование бинарных форматов (MessagePack, Protobuf) для экономии места и скорости,
- кэширование часто запрашиваемых данных.
Когда JSON не лучшая опция
- вам нужны сложные объекты Python (datetime, Decimal, пользовательские классы) — потребуется доп. сериализация;
- большая бинарная нагрузка — лучше использовать бинарные форматы;
- требуются строгие схемы и валидация — рассмотрите Avro или Protobuf.
Альтернативные подходы
- Для строгой схемы: Protocol Buffers (Protobuf) или Avro.
- Для хранения JSON-документов в БД: MongoDB, CouchDB или PostgreSQL с JSONB.
- Для быстрой сериализации в Python: pickle (но не безопасен для ненадёжных данных).
Безопасность и частые ошибки
- Никогда не используйте eval() на данных из JSON.
- Валидация входных данных перед использованием.
- Устанавливайте encoding=”utf-8” при открытии файлов для предсказуемой кодировки.
- Контролируйте права доступа к файлам (chmod) при работе в продакшне.
Совет: при работе с данными от пользователей всегда проверяйте структуру и типы полей.
Шпаргалка — быстрые сниппеты
- Запись: json.dump(obj, file, ensure_ascii=False, indent=2)
- Чтение: data = json.load(file)
- Преобразование строки JSON: obj = json.loads(json_string)
- Получение строки из объекта: json_string = json.dumps(obj, ensure_ascii=False)
Примеры отказа и проверка пограничных случаев
- Если файл пустой — json.load() вызовет JSONDecodeError. Обрабатывайте исключения.
- При одностороннем объединении списков проверьте равенство длин. Пример проверки:
if len(keys) != len(values):
raise ValueError("Длины списков не совпадают")Ролевые чек‑листы
- Разработчик: проверить сериализацию/десериализацию, покрыть тестами.
- Инженер данных: убедиться в совместимости схемы, предусмотреть null-значения.
- DevOps: настроить права доступа и резервное копирование JSON-файлов.
Краткий словарь
- JSON: текстовый формат обмена данными.
- Сериализация: преобразование структуры данных в формат для хранения/передачи.
- Десериализация: обратный процесс — получение структуры из формата.
Критерии приёмки
- Файл читается и парсится без ошибок.
- Структура данных соответствует ожидаемой схеме.
- Код обрабатывает некорректные входные данные и логирует ошибки.
Итог
JSON в Python — надёжный и простой инструмент для обмена данными. Для большинства задач достаточно встроенной библиотеки json. При высоких требованиях к скорости, компактности или строгой схеме рассмотрите альтернативные форматы и подходы.
Заметки: избегайте unsafe-практик, валидируйте входные данные и используйте indent/ensure_ascii для удобочитаемых и корректных файлов.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента