Как разобрать 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 для анализа, форматирования и проверки.