Как разобрать JSON в Python

Опубликовано: 2022-02-09

JSON — популярный формат для обмена данными. Python поставляется со встроенным модулем JSON для анализа и работы с данными JSON. И этот учебник научит вас всему, как работать с JSON в Python.

К концу этого урока вы узнаете:

  • основы JSON,
  • как анализировать и создавать строки JSON в Python и
  • как читать и записывать файлы JSON в Python.

Давайте начнем!

Что такое JSON?

JSON расшифровывается как J ava S cript Object Notation и представляет собой текстовый формат для обмена данными. Хотя JSON изначально вдохновлен объектами JavaScript, почти все языки программирования поддерживают работу с JSON.

Если вы когда-либо работали с API или читали файлы конфигурации, вы, вероятно, сталкивались с JSON.

Вы отправляете и получаете данные в формате JSON при запросе API. Кроме того, JSON широко используется для связи клиент-сервер в программных приложениях. Кроме того, вы также можете использовать JSON для хранения данных общего назначения.

Формат JSON очень похож на формат словаря Python. Словари — это мощные встроенные структуры данных в Python, которые хранят данные в парах ключ-значение.

Прежде чем мы пойдем дальше, стоит отметить несколько моментов:

  • В Python объект JSON хранится как словарь.
  • Массив в JSON хранится в виде списка Python.
  • В JSON логические значения обозначаются как true и false . В Python они преобразуются в логические значения True и False .

Подробнее о типах данных, которые переводятся из JSON в Python, читайте здесь.

Поскольку модуль json является частью стандартной библиотеки Python, вам не нужно его устанавливать. Вы можете импортировать в свой текущий каталог, например:

 import json

Как загрузить строку JSON в Python

Общий синтаксис для загрузки строки JSON в Python:

 <dict_obj> = json.loads(<json_str>)

Здесь,

  • <dict_obj> — это словарь Python, в который вы хотите загрузить строку JSON,
  • <json_str> — любая допустимая строка JSON.

Это загружает <json_str> в словарь Python <dict_obj> .

Давайте закодируем пример. Здесь json_str — это строка JSON.

 json_str = ''' { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } '''

Фрагмент кода ниже показывает, как вы можете загрузить строку JSON json_str в словарь Python, используя метод load loads() . Вы можете использовать встроенную функцию type() , чтобы убедиться, что py_dict является словарем Python.

 py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}

Как показано в приведенном выше коде, все поля в строке JSON являются парами ключ-значение в py_dict .

Как создавать строки JSON в Python

Предположим, у вас есть словарь Python. Так как же создать из него строку JSON?

Вы можете сделать это, используя метод dumps() со следующим синтаксисом:

 <json_str> = json.dumps(<dict_obj>)

Здесь,

  • <dict_obj> — это словарь Python, из которого вы хотите создать строку JSON,
  • <json_str> — результирующая строка JSON.

Таким образом, метод dumps dumps() выгружает <dict_obj> в строку JSON <json_str> .

В наш существующий словарь Python py_dict . давайте добавим новый ключ "movies" . Вы можете сделать это, как показано в следующем фрагменте кода:

 py_dict["movies"] = [{"title":"The Imitation Game","year":"2014", "lang":"en","watched":True}]

Теперь давайте выгрузим измененный словарь в новую строку JSON json_str2 используя метод dumps dumps() .

 json_str2 = json.dumps(py_dict) print(json_str2) # Output {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}

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

И вы можете сделать это, установив indent целому числу, например 2, как показано ниже:

 json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }

Обратите внимание, как выходные данные были отформатированы с отступом, и это легко выполнить.

Примечание . Если вы хотите, чтобы ключи сортировались в алфавитном порядке, вы можете установить для параметра sort_keys значение True .

Как видно из приведенного ниже фрагмента кода, ключи теперь отсортированы в алфавитном порядке.

 json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ]

И ключи теперь появляются в алфавитном порядке: "author" , "title" и "year" .

Итак, вы узнали, как работать со строками JSON в Python. В следующем разделе вы узнаете, как работать с файлами JSON.

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

Чтобы прочитать файл JSON в Python, используйте следующий синтаксис:

 json.load(<json-file>) # where <json-file> is any valid JSON file.

Обратите внимание, как мы используем метод load() , а не метод load( loads() . load( loads() загружает строку JSON, а load() загружает файл JSON .

Вам следует рассмотреть возможность использования контекстных менеджеров при работе с файлами в Python. Вы также можете попробовать читать файлы следующим образом, не используя контекстный менеджер:

 my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()

Если вы не закроете файл, может возникнуть потенциальная трата ресурсов.

Однако при работе с контекстными менеджерами файлы автоматически закрываются после завершения файловых операций.

И вы можете использовать контекстный менеджер для чтения файлов, как показано ниже:

 with open('students.json','r') as file: data = json.load(file) print(data) # Output {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}

Когда вы читаете из файла, укажите режим чтения , обозначенный буквой 'r' в приведенном выше коде.

Примечание . Чтобы легко перемещаться по текущему каталогу, убедитесь, что файл JSON находится в той же папке, что и main.py , как показано на изображении ниже. Если ваш файл JSON находится в другой папке, обязательно укажите путь к файлу.

чтение-json-файл-в-питоне
Прочитайте файл JSON в Python.

В следующем разделе вы узнаете, как писать в файл JSON.

Как написать в файл JSON в Python

Чтобы записать в существующий файл JSON или создать новый файл JSON, используйте метод dump() , как показано ниже:

 json.dump(<dict_obj>,<json_file>) # where <dict_obj> is a Python dictionary # and <json_file> is the JSON file

Таким образом, приведенный выше синтаксис выгружает словарь <dict_obj> в файл JSON <json_file> .

В предыдущем разделе у нас был словарь py_dict . Теперь давайте перенесем это в новый файл JSON. И давайте назовем его new_file.json .

В следующей ячейке кода показано, как можно использовать функцию dump() :

 with open('new_file.json','w') as file: json.dump(py_dict,file)

Примечание . При открытии файла в режиме записи ( w ) его содержимое перезаписывается, если файл существует. Если файл не существует, файл создается.

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

создать-json-файл-python
Создайте файл JSON в Python

При записи в файлы ключевой целью является хранение данных. И если вы хотите сохранить форматирование, вы также можете использовать параметры indent и sort_keys .

Вывод

Пришло время для краткого обзора.

В этом уроке вы узнали:

  • основы использования JSON,
  • как использовать методы load( loads() и load() для чтения строки JSON и файлов JSON соответственно,
  • как использовать методы dumps() и dump() для вывода словарей Python в строки JSON и файлы JSON соответственно.

Я надеюсь, что вы нашли этот урок полезным. Приятного обучения!

Вы также можете воспользоваться инструментами JSON для анализа, форматирования и проверки.