Как в Python работать с JSON: парсинг и генерация JSON-данных

В этой статье мы рассмотрим, как можно работать с JSON в Python: от парсинга данных до их генерации.

Что такое JSON?

JSON — это текстовый формат, который позволяет структурировать данные в виде пар ключ-значение, массивов, строк и других примитивных типов. Пример JSON-структуры:

{
  "name": "John",
  "age": 30,
  "is_employee": true,
  "skills": ["Python", "Django", "Machine Learning"]
}

Модуль json в Python

Модуль json предоставляет функции для преобразования данных из JSON-формата в объекты Python и наоборот. Основные функции модуля:

  • json.loads(): конвертирует JSON-строку в объект Python.
  • json.load(): читает JSON-данные из файла и преобразует их в объекты Python.
  • json.dumps(): преобразует объекты Python в строку JSON.
  • json.dump(): записывает объекты Python в файл в формате JSON.

Импорт модуля

Прежде чем начать работать с JSON, необходимо импортировать модуль:

import json

Парсинг JSON-данных

Парсинг JSON означает преобразование строки JSON в объект Python, который может быть легко обработан.

Пример использования json.loads()

Функция json.loads() принимает строку в формате JSON и возвращает соответствующий объект Python (словарь, список и т.д.).

import json

# JSON-строка
json_data = '{"name": "John", "age": 30, "is_employee": true}'

# Парсинг JSON в объект Python
data = json.loads(json_data)

print(data)
print(data['name'])  # Доступ к значению по ключу

Вывод:

{'name': 'John', 'age': 30, 'is_employee': True}
John

Пример использования json.load()

Функция json.load() читает JSON-данные из файла и преобразует их в объект Python.

import json

# Чтение JSON-файла
with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

Предположим, файл data.json содержит следующие данные:

{
  "name": "John",
  "age": 30,
  "is_employee": true
}

Вывод программы будет аналогичен предыдущему примеру.

Генерация JSON-данных

Генерация JSON означает преобразование объектов Python в строки JSON, которые можно сохранить в файл или отправить через API.

Пример использования json.dumps()

Функция json.dumps() конвертирует объект Python (например, словарь или список) в строку JSON.

import json

# Объект Python
data = {
    "name": "John",
    "age": 30,
    "is_employee": True,
    "skills": ["Python", "Django"]
}

# Преобразование в строку JSON
json_data = json.dumps(data)

print(json_data)

Вывод:

{"name": "John", "age": 30, "is_employee": true, "skills": ["Python", "Django"]}

Пример использования json.dump()

Функция json.dump() записывает объект Python в файл в формате JSON.

import json

# Объект Python
data = {
    "name": "John",
    "age": 30,
    "is_employee": True,
    "skills": ["Python", "Django"]
}

# Запись JSON в файл
with open('output.json', 'w') as file:
    json.dump(data, file)

Теперь файл output.json будет содержать следующее:

{
  "name": "John",
  "age": 30,
  "is_employee": true,
  "skills": ["Python", "Django"]
}

Настройка форматирования JSON

Иногда при генерации JSON необходимо, чтобы данные были отформатированы для удобного чтения, например, с отступами. Для этого можно использовать параметр indent в функции json.dumps().

import json

data = {
    "name": "John",
    "age": 30,
    "is_employee": True,
    "skills": ["Python", "Django"]
}

# Преобразование с отступами
json_data = json.dumps(data, indent=4)

print(json_data)

Вывод:

{
    "name": "John",
    "age": 30,
    "is_employee": true,
    "skills": [
        "Python",
        "Django"
    ]
}

Работа с параметром ensure_ascii

По умолчанию Python преобразует все не-ASCII символы в их экранированные версии в строке JSON. Чтобы этого избежать, можно использовать параметр ensure_ascii=False.

import json

data = {
    "name": "Иван",
    "age": 30,
    "is_employee": True
}

# Преобразование с поддержкой не-ASCII символов
json_data = json.dumps(data, ensure_ascii=False)

print(json_data)

Вывод:

{"name": "Иван", "age": 30, "is_employee": true}

Обработка ошибок при парсинге JSON

При работе с JSON могут возникнуть ошибки парсинга, особенно если данные имеют неверный формат. Python предоставляет механизм обработки исключений для таких случаев.

import json

invalid_json = '{"name": "John", "age": 30,'  # Некорректный JSON

try:
    data = json.loads(invalid_json)
except json.JSONDecodeError as e:
    print(f"Ошибка при парсинге JSON: {e}")

Вывод:

Ошибка при парсинге JSON: Expecting property name enclosed in double quotes: line 1 column 23 (char 22)

Работа с JSON в Python является неотъемлемой частью разработки приложений, особенно если они взаимодействуют с веб-сервисами и API. Модуль json предоставляет удобные инструменты для парсинга и генерации JSON-данных, а также настройки их форматирования и обработки ошибок. Используя функции json.loads(), json.load(), json.dumps() и json.dump(), можно легко работать с JSON-форматом как в памяти, так и при записи данных в файлы.