Гид по технологиям

Чтение и запись JSON в Python

3 min read Программирование Обновлено 28 Mar 2026
Чтение и запись JSON в Python
Чтение и запись JSON в Python

Кратко

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

Редактор кода с файлом 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 для удобочитаемых и корректных файлов.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро