← Назад к вопросам

Как прочитать JSON в Python?

1.3 Junior🔥 281 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как прочитать JSON в Python

JSON (JavaScript Object Notation) — это текстовый формат для обмена данными. Python имеет встроенный модуль `json` для работы с ним, который позволяет легко сериализовать и десериализовать JSON.

Основной модуль json

В Python используется встроенный модуль json:

import json

Он предоставляет четыре основные функции:

  • json.loads() — строка JSON → Python объект
  • json.dumps() — Python объект → строка JSON
  • json.load() — файл JSON → Python объект
  • json.dump() — Python объект → файл JSON

Чтение JSON из строки

import json

json_string = '{"name": "John", "age": 30, "city": "New York"}'
data = json.loads(json_string)

print(data)              # {'name': 'John', 'age': 30, 'city': 'New York'}
print(data['name'])      # John
print(type(data))        # <class 'dict'>

Чтение JSON из файла

import json

# Способ 1: используя json.load()
with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

# Способ 2: прочитать строку и распарсить
with open('data.json', 'r') as file:
    json_string = file.read()
    data = json.loads(json_string)

Работа со сложными структурами

json_string = '''
{
  "users": [
    {"id": 1, "name": "Alice", "roles": ["admin", "user"]},
    {"id": 2, "name": "Bob", "roles": ["user"]}
  ],
  "metadata": {
    "version": "1.0",
    "timestamp": "2024-01-01T12:00:00Z"
  }
}
'''

data = json.loads(json_string)

# Доступ к вложенным данным
print(data['users'][0]['name'])        # Alice
print(data['metadata']['version'])     # 1.0

# Итерация по массивам
for user in data['users']:
    print(f"{user['name']}: {user['roles']}")

Валидация и обработка ошибок

import json

json_string = "invalid json"

try:
    data = json.loads(json_string)
except json.JSONDecodeError as e:
    print(f"Ошибка при парсинге JSON: {e}")
    print(f"Строка: {e.doc}")
    print(f"Позиция: {e.pos}")

Класс json.JSONDecodeError содержит информацию об ошибке:

  • msg — сообщение об ошибке
  • doc — исходная строка
  • pos — позиция ошибки
  • lineno — номер строки
  • colno — номер колонки

Преобразование Python объектов в JSON

data = {
    "name": "John",
    "age": 30,
    "skills": ["Python", "JavaScript", "SQL"],
    "is_active": True
}

# Преобразование в строку JSON
json_string = json.dumps(data)
print(json_string)  # {"name": "John", "age": 30, ...}

# С красивым форматированием (indent)
json_formatted = json.dumps(data, indent=2)
print(json_formatted)  # красиво отформатированный JSON

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

Параметры json.loads() и json.dumps()

Основные параметры dumps():

json.dumps(
    data,
    indent=2,              # Отступ для форматирования
    sort_keys=True,        # Сортировать ключи
    ensure_ascii=True,     # Экранировать не-ASCII символы
    separators=(',', ':')  # Кастомные разделители
)

Параметры loads():

json.loads(
    json_string,
    parse_float=float,     # Функция для парсинга чисел
    parse_int=int,         # Функция для парсинга целых
    strict=True            # Проверка управляющих символов
)

Работа с нестандартными типами

from datetime import datetime
import json

data = {
    "timestamp": datetime.now(),
    "value": 42
}

# Ошибка: datetime не сериализуется по умолчанию
# json.dumps(data)  # TypeError

# Решение 1: кастомный encoder
class DateTimeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

json_string = json.dumps(data, cls=DateTimeEncoder)
print(json_string)

# Решение 2: default parameter
json_string = json.dumps(
    data,
    default=lambda o: o.isoformat() if isinstance(o, datetime) else None
)

Заключение

Модуль json в Python предоставляет простой и мощный способ работать с JSON данными. Ключевые точки:

  • loads() для строк, load() для файлов
  • Обработка ошибок через JSONDecodeError
  • Форматирование с indent для читаемости
  • Кастомные encoders для нестандартных типов