Как разобрать JSON в Python
Опубликовано: 2022-02-09JSON — популярный формат для обмена данными. 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, используйте метод 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.

При записи в файлы ключевой целью является хранение данных. И если вы хотите сохранить форматирование, вы также можете использовать параметры indent и sort_keys .
Вывод
Пришло время для краткого обзора.
В этом уроке вы узнали:
- основы использования JSON,
- как использовать методы load(
loads()иload()для чтения строки JSON и файлов JSON соответственно, - как использовать методы
dumps()иdump()для вывода словарей Python в строки JSON и файлы JSON соответственно.
Я надеюсь, что вы нашли этот урок полезным. Приятного обучения!
Вы также можете воспользоваться инструментами JSON для анализа, форматирования и проверки.
