
JSON используется для передачи данных между веб-приложениями, сервером и клиентом. В Python работа с этим форматом основана на стандартном модуле json, который не требует установки сторонних библиотек. Он позволяет преобразовывать строку в объект Python и обратно.
Для начала важно понимать различия между JSON и структурами данных в Python. В JSON объект соответствует dict, массив – list, строка – str, число – int или float, логическое значение – True/False, а null преобразуется в None. Эта связь определяет корректность парсинга и облегчает дальнейшую обработку информации.
При работе с JSON чаще всего используются функции json.loads() для чтения данных из строки и json.load() для чтения из файла. В обратную сторону данные сериализуются с помощью json.dumps() и json.dump(). Правильное понимание различий между этими методами исключает типичные ошибки, например, путаницу между строками и файловыми объектами.
Дальнейшие шаги будут включать конкретные примеры загрузки данных из файлов, обработки вложенных структур, настройки отступов и кодировки при сохранении. Такой подход позволяет эффективно интегрировать JSON в проекты на Python без лишних зависимостей.
Подключение модуля json и базовые функции
В Python работа с JSON выполняется через встроенный модуль json. Подключение модуля производится стандартным импортом:
import json
Основные функции для чтения и записи JSON:
json.loads()– преобразует строку в объект Python (словарь, список и т.д.).json.dumps()– переводит объект Python в строку JSON.json.load()– читает JSON из файла и возвращает объект Python.json.dump()– записывает объект Python в файл в формате JSON.
Примеры использования:
# строка JSON
data_str = '{"name": "Иван", "age": 30}'
obj = json.loads(data_str)
print(obj["name"]) # Иван
# объект Python в строку JSON
person = {"city": "Москва", "active": True}
json_str = json.dumps(person, ensure_ascii=False)
print(json_str) # {"city": "Москва", "active": true}
При работе с файлами:
# запись в файл
with open("data.json", "w", encoding="utf-8") as f:
json.dump(person, f, ensure_ascii=False, indent=2)
# чтение из файла
with open("data.json", "r", encoding="utf-8") as f:
loaded = json.load(f)
print(loaded)
Ключевые параметры:
ensure_ascii=False– сохраняет кириллицу без преобразования в Unicode-последовательности.sort_keys=True– сортирует ключи словаря при записи.
Чтение JSON из строки с помощью json.loads()

Функция json.loads() принимает строку в формате JSON и преобразует её в объект Python. Чаще всего результатом будет словарь (dict) или список (list), в зависимости от структуры данных.
Пример базового использования:
import json
data_str = '{"name": "Иван", "age": 30, "skills": ["Python", "SQL"]}'
result = json.loads(data_str)
print(result["name"]) # Иван
print(result["skills"]) # ['Python', 'SQL']
При некорректной строке будет выброшено исключение json.JSONDecodeError, поэтому рекомендуется использовать блок try/except для обработки ошибок.
try:
obj = json.loads('{"age": 25, "city": "Москва"')
except json.JSONDecodeError as e:
print("Ошибка разбора:", e)
Основные параметры json.loads():
| Параметр | Назначение | Пример |
|---|---|---|
object_hook |
Функция для преобразования словарей | json.loads(s, object_hook=my_func) |
parse_float |
Заменяет тип float пользовательской функцией |
json.loads(s, parse_float=Decimal) |
parse_int |
Заменяет тип int |
json.loads(s, parse_int=lambda x: int(x) * 2) |
strict |
Управляет проверкой символов управления | json.loads(s, strict=False) |
Использование дополнительных параметров помогает контролировать типы данных и адаптировать парсинг под конкретные задачи.
Загрузка JSON из файла через json.load()

Для чтения JSON-данных из локального файла используется функция json.load(). Она принимает объект файла, открытый через open(), и преобразует содержимое в стандартные структуры Python.
Пример использования:
import json
with open("data.json", "r", encoding="utf-8") as file:
data = json.load(file)
print(data)
Важные моменты:
- Файл открывается в текстовом режиме с указанием encoding=»utf-8″, чтобы корректно обработать кириллические символы.
- Функция возвращает словарь или список в зависимости от структуры JSON.
- При поврежденных данных вызывается json.JSONDecodeError, обработку ошибки стоит предусмотреть.
Рекомендация: перед загрузкой убедитесь, что файл содержит валидный JSON, например, с помощью онлайн-валидатора или предварительной проверки структуры.
Разбор вложенных структур: списки и словари

При работе с JSON часто встречаются вложенные массивы и объекты. Для корректного доступа нужно понимать, какие типы данных возвращает Python после преобразования строки в словарь.
- JSON-объект → dict
- JSON-массив → list
- Строка → str
- Число → int или float
- true/false → True/False
- null → None
Пример вложенной структуры:
{
"user": {
"name": "Иван",
"orders": [
{"id": 1, "price": 250},
{"id": 2, "price": 300}
]
}
}
После загрузки через json.loads() данные становятся словарём. Доступ к вложенным значениям:
data["user"]["name"] # "Иван"
data["user"]["orders"][0]["id"] # 1
Чтобы пройти по списку словарей:
for order in data["user"]["orders"]:
print(order["id"], order["price"])
Рекомендации при обработке:
- Проверяйте наличие ключей через
inилиdict.get(), чтобы избежать ошибокKeyError. - Для вложенных структур используйте вложенные циклы: сначала обход списка, затем доступ к значениям внутри словаря.
- При неизвестной глубине вложенности применяйте рекурсивные функции или готовые библиотеки (
jsonpath,glom). - Используйте списковые включения для извлечения данных из массива словарей, например:
[o["price"] for o in data["user"]["orders"]].
Обработка ошибок при парсинге JSON

Для перехвата ошибок используйте конструкцию try/except:
import json
data = '{"name": "Иван", "age": 30,}' # лишняя запятая
try:
obj = json.loads(data)
except json.JSONDecodeError as e:
print("Ошибка парсинга:", e)
В блоке except объект e содержит подробности: позицию ошибки и описание. Это помогает отладить входные данные.
Если источник данных внешний (API, файл, пользовательский ввод), рекомендуется:
- проверять тип входных данных перед разбором (isinstance(data, str));
- ограничивать размер строки для защиты от перегрузки памяти;
- логировать исходный фрагмент при ошибке для диагностики;
- использовать значения по умолчанию или пустые структуры, если корректный JSON недоступен.
Такой подход позволяет избежать аварийного завершения программы и сохраняет контроль над обработкой некорректных данных.
Конвертация Python-объектов обратно в JSON
Для преобразования Python-объектов в JSON используется функция json.dumps(). Она принимает словари, списки, строки, числа и булевы значения, возвращая строку в формате JSON.
Пример преобразования словаря:
import json
data = {'имя': 'Анна', 'возраст': 28, 'активен': True}
json_string = json.dumps(data, ensure_ascii=False)
print(json_string)
Аргумент ensure_ascii=False позволяет корректно отображать кириллицу без экранирования символов.
Для упорядочивания ключей можно использовать sort_keys=True:
json.dumps(data, ensure_ascii=False, sort_keys=True)
Для улучшения читаемости применяют параметр indent, задающий отступы:
json.dumps(data, ensure_ascii=False, indent=4)
Если требуется сохранить JSON прямо в файл, используют json.dump():
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
Для работы с нестандартными объектами (например, datetime) можно передать функцию сериализации через default:
import datetime
def serialize(obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()
raise TypeError('Тип не поддерживается')
json.dumps({'сейчас': datetime.datetime.now()}, default=serialize, ensure_ascii=False)
Такой подход гарантирует корректное преобразование любых объектов, обеспечивая совместимость с JSON-форматом и удобство последующей обработки.
Работа с кириллицей и настройка кодировки

При работе с JSON в Python с кириллическими символами важно правильно указывать кодировку. По умолчанию функции open() и json.load() могут интерпретировать текст как UTF-8, но явное указание кодировки предотвращает ошибки.
Для чтения файла используйте конструкцию:
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
При записи JSON с кириллицей применяйте параметр ensure_ascii=False, чтобы символы оставались читаемыми, а не преобразовывались в escape-последовательности. Пример:
with open('output.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
Если файл содержит BOM (Byte Order Mark), используйте utf-8-sig для корректного чтения:
with open('data.json', 'r', encoding='utf-8-sig') as f:
data = json.load(f)
При работе с внешними источниками проверяйте их кодировку перед парсингом. Для текстовых данных с кириллицей предпочтительно сохранять UTF-8 без BOM, чтобы избежать ошибок декодирования и некорректного отображения символов в JSON.
Вопрос-ответ:
Что такое JSON и зачем его используют в Python?
JSON (JavaScript Object Notation) — это текстовый формат для хранения и передачи данных. В Python его применяют для обмена информацией между приложениями, для конфигурационных файлов и при работе с веб-API. Он удобен тем, что легко читается человеком и автоматически преобразуется в словари и списки Python с помощью встроенного модуля json.
Как открыть JSON-файл и загрузить данные в Python?
Для работы с JSON-файлом в Python обычно используют модуль json. Сначала файл открывают стандартной функцией open(), затем применяют json.load() для чтения содержимого и преобразования его в объекты Python, например словари или списки. После этого с данными можно работать так же, как с обычными структурами данных.
Можно ли получить доступ к отдельным значениям внутри JSON?
Да, после загрузки JSON в Python его структура становится похожей на словари и списки. Можно обращаться к ключам словаря через квадратные скобки или метод get(), а к элементам списка — по индексу. Например, если JSON содержит список пользователей, можно получить имя первого пользователя через data[‘users’][0][‘name’].
Как преобразовать строку JSON в объекты Python без использования файла?
Если JSON приходит в виде строки, применяется функция json.loads(). Она принимает строку и возвращает соответствующие объекты Python. Это удобно, когда данные получены через запрос к API или из другой программы. После этого можно работать с объектами так же, как если бы они были загружены из файла.
Что делать, если JSON-файл поврежден или содержит ошибки?
При попытке загрузки поврежденного JSON Python выдаст исключение json.JSONDecodeError. Чтобы обработать такие ситуации, используют конструкцию try-except. В блоке except можно вывести сообщение об ошибке или принять меры по восстановлению данных. Также полезно проверять файл в текстовом редакторе или онлайн-валидаторе, чтобы убедиться в правильности структуры.
