JSON является одним из самых распространённых форматов хранения данных. Сегодня поговорим о работе с JSON в Python. Читайте далее, как соотносятся словари и JSON, сериализация и десериализация, в чем разница между функциями dump и dumps, load и loads в Python.
JSON что это
JSON расшифровывается как JavaScript Object Notation. Эта нотация берет своё начало с записи объектов в языке JavaScript. С момента своего создания JSON быстро стал де-факто стандартом для обмена информацией. Если вы собираете информацию в Интернете, применяя методы Web Mining или какой-нибудь API, то, вероятно, данные будут храниться в этом формате. Также некоторые базы данных работают с JSON, например, MongoDB. Кто знаком с Python не найдут JSON чем-то сложным по нескольким причинам:
- В Python есть стандартная библиотека, чьи функции легко запоминаются.
- Нотация JSON схожа со словарями (dict):
{ "firstName": "Oleg", "lastName": "Brusnika", "hobbies": ["programming", "reading", "dancing"], "age": 45, "children": [ { "firstName": "Polina", "age": 6 }, { "firstName": "Anna", "age": 8 } ] }
Сериализация JSON, или в чем разница между dump и dumps
Процесс кодирования данных в необходимый формат обычно называется сериализацией. Мы же кодируем в JSON. Допустим, что есть словарь, который нужно сериализовать в JSON.
data = {
"president": {
"name": "Joe Biden",
"species": "homo"
}
}
Для того чтобы записать эти данные в файл с форматом JSON в Python, используется функция dump:
with open("your_file.json", "w") as write_file:
json.dump(data, write_file)
С другой стороны, если вы продолжаете работать с JSON файлами, то лучше сериализованные данные представить в виде строки (str) с помощью функции dumps.
>>> json_string = json.dumps(data)
>>> json_string
'{"president": {"name": "Joe Biden", "species": "homo"}}'
>>> type(json_string)
str
Итак, dump отличается от dumps тем, что dump записывает объект Python в файл JSON, а dumps сериализует объект Python и хранит его в виде строки.
Десериализация JSON
В том случае, когда есть файл JSON, который необходимо преобразовать в объект Python, тогда проводится десериализация. Для десериализации по аналогии используются две функции: load и loads.
У нас уже есть JSON-файл, который мы записали выше. Прочитаем его и выведем на экран с помощью функции load в Python:
>>> with open("your_file.json", "r") as f:
... data = json.load(f)
>>> data
{'president': {'name': 'Joe Biden', 'species': 'homo'}}
>>> type(data)
dict
Заметим, что функция load выгрузила данные в виде словаря. Результатом функции может стать любой Python объект. В данном случае файл начинался с фигурной скобки {, что соответствует словарю Python.
С другой стороны, если имеется строка с JSON нотацией, то чтобы преобразовать её в словарь, используется функция loads:
>>> data = '{"friends": ["Lilith", "Oleg"]}'
>>> d = json.loads(data)
>>> type(d)
dict
Обратите внимание, что внутри строкового выражения стоят двойные кавычки. Этого требует нотация JSON. Если будут одинарные, то появится исключение.
Ниже таблица, где представлено различие между функциями Python для работы с JSON. Под объектом Python может подразумеваться словарь (dict), список (list), строка (str), число (int, float).
|
Функция |
Определение |
|
dump |
Записывает Python-объекты в файл JSON |
|
dumps |
Сохраняет объект в виде строки с нотацией JSON |
|
load |
Прочитывает файл JSON и возвращает его в виде объекта |
|
loads |
Преобразует строку с нотацией JSON в объект |
- Беслатный курс «Основы языка Python для анализа данных и решения задач машинного обучения»
- Подготовка данных для Data Mining на Python
О том, как применять формат JSON для сбора, хранения и вывода данных в Python на примерах прикладных задач Data Science, вы узнаете на наших курсах в лицензированном учебном центре обучения и повышения квалификации Data Scientist’ов и IT-специалистов в Москве.




[…] Допустим имеется, строковый вариант записи JSON. Например, мы можем сымитировать его с помощью Python-модуля json (об этом модуле тут): […]