Как читать и анализировать файл JSON в Python

Узнайте, как читать, анализировать и загружать файлы JSON в Python с помощью встроенного модуля json. Освойте преобразование строк JSON в словари и наоборот.

Попробуйте это решение в редакторе

Обзор

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

Чтобы прочитать JSON из внешнего файла, вы используете функцию json.load(), которая анализирует поток файлов и преобразует структуры JSON в типы данных Python. Если данные JSON уже загружены в память в виде строки, вместо этого вы используете функцию json.loads() (s означает строку). Выбор правильной функции предотвращает сбои парсера.

При работе с JSON рекомендуется устранять ошибки кодирования и возможные ошибки форматирования. Использование `encoding="utf-8"` в операторе `open()` защищает ваш скрипт от сбоев при использовании специальных символов. Обертывание файловых операций в блок Try-Exception, перехватывающий json.JSONDecodeError, гарантирует корректное ухудшение качества вашего приложения, если файл JSON имеет неверный формат.

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

Этот код демонстрирует написание примера файла JSON, его чтение и синтаксический анализ обратно в словарь Python, а также обработку строки JSON.

import json

# Let's write a mock JSON file first
sample_data = {
    "user": "developer123",
    "skills": ["python", "javascript", "sql"],
    "active": True
}
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(sample_data, f, indent=4)

# 1. Reading from a JSON file (using json.load)
with open("data.json", "r", encoding="utf-8") as file:
    data_from_file = json.load(file)
    print("File Content type:", type(data_from_file).__name__)
    print("User skill list:", data_from_file["skills"])

# 2. Reading from a JSON string (using json.loads)
json_string = '{"host": "localhost", "port": 5432, "ssl": false}'
data_from_str = json.loads(json_string)
print("\nString Content type:", type(data_from_str).__name__)
print("Database host:", data_from_str["host"])
Терминальный выход
File Content type: dict
User skill list: ['python', 'javascript', 'sql']

String Content type: dict
Database host: localhost

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

  • Импортируйте встроенный модуль json в свой скрипт.
  • Откройте файл JSON, используя в качестве файла open("filename.json", "r",coding="utf-8").
  • Передайте объект файла в json.load(file), чтобы проанализировать содержимое в словаре Python.
  • Используйте json.loads(string_data), если вам нужно проанализировать необработанную строку JSON, уже загруженную в память.

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

В чем разница между json.load() и json.loads()?

json.load() принимает файловый объект потока (чтение с диска), тогда как json.loads() принимает стандартную строку или байтовый объект, содержащий содержимое JSON (чтение из памяти).

Как обрабатывать ошибки сериализации JSON для пользовательских классов?

Модуль json Python по умолчанию не может сериализовать экземпляры пользовательских классов. Вы должны предоставить собственный класс кодировщика, расширяющий json.JSONEncoder, или сначала извлечь атрибуты экземпляра в словарь, используя вспомогательный метод.

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

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

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