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 (об этом модуле тут): […]