Комментарии (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 объект → строка JSONjson.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 для нестандартных типов