Разбор JSON Python: сериализация и десериализация

Узнайте, как читать, записывать и анализировать данные JSON в Python. Освойте json.loads, json.dumps и настройте кодеры/декодеры JSON.

Попробуйте в редакторе

Обзор

JSON (нотация объектов JavaScript) — это облегченный формат обмена данными, который доминирует в современных веб-API, конфигурациях и полезных нагрузках баз данных. Поскольку структуры JSON напоминают словари и списки Python, перевод между ними невероятно прост. Python оснащен встроенным модулем json, который позволяет легко анализировать строки JSON в объекты Python и преобразовывать объекты Python обратно в строки JSON.

Процесс перевода объекта Python (например, словаря) в необработанную строку JSON называется сериализацией или кодированием. Это обрабатывается с помощью json.dumps() (для строк) и json.dump() (для записи непосредственно в файл). Вы можете управлять параметрами форматирования, такими как «отступ», чтобы упорядочить JSON, или «sort_keys», чтобы атрибуты располагались в алфавитном порядке. И наоборот, анализ строки JSON в словаре Python называется десериализацией и выполняется с помощью json.loads() и json.load().

В то время как стандартные типы Python, такие как строки, числа, списки и словари, сериализуются в JSON автоматически, пользовательские объекты (например, классы или объекты даты и времени) этого не делают. Попытка напрямую закодировать пользовательский объект вызовет ошибку TypeError. Чтобы преодолеть эту проблему, разработчики должны создать собственный класс кодировщика, который наследуется от json.JSONEncoder, и переопределить метод .default() для сериализации классов в читаемые словари. Освоение манипуляций с JSON является ключом к общению с внешними веб-сервисами.

Код и вывод выполнения

Преобразование словаря в строку JSON и его обратный анализ с помощью встроенной библиотеки json.

import json

# Python Dictionary representing a user profile
user_profile = {
    "name": "Alex",
    "is_premium": True,
    "skills": ["Python", "Docker"],
    "age": 28
}

# Serialize dictionary to JSON string
json_string = json.dumps(user_profile, indent=2)
print("--- JSON String ---")
print(json_string)

# Deserialize JSON string back to dictionary
parsed_dict = json.loads(json_string)
print("\n--- Parsed Python Dictionary ---")
print(f"Name: {parsed_dict['name']}")
print(f"First Skill: {parsed_dict['skills'][0]}")
Терминальный выход
--- JSON String ---
{
  "name": "Alex",
  "is_premium": true,
  "skills": [
    "Python",
    "Docker"
  ],
  "age": 28
}

--- Parsed Python Dictionary ---
Name: Alex
First Skill: Python

Пошаговая реализация

  • Отправка полезных данных и чтение данных из REST API
  • Сохранение настроек конфигурации внутри файлов settings.json.
  • Передача структурированных полезных данных между микросервисами

Часто задаваемые вопросы

В чем разница между json.dump и json.dumps?

json.dump (без «s») записывает данные JSON непосредственно в файловый поток. json.dumps (с символом «s») сериализует данные в строковую переменную Python.

Как вы обрабатываете ошибки декодирования JSON?

Оберните свой код синтаксического анализа в блок try/Exception, перехватывающий json.JSONDecodeError, чтобы корректно обрабатывать некорректные строки JSON.

Связанные темы

Рекомендуемые ресурсы Python

Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.