Как работать с модулем JSON в Python: полное руководство
Как работать с модулем JSON в Python: полное руководство
Рассказываем, что такое JSON, для чего он нужен и как преобразовать Python-объекты в JSON и наоборот.
JSON (JavaScript Object Notation — «обозначение объектов JavaScript») — это формат для представления структурированных данных на основе синтаксиса объекта JavaScript. JSON обычно применяется для передачи данных в веб-приложениях. В Python работа с этим форматом реализована через стандартный модуль `json` — он нужен, чтобы упростить преобразование объектов Python в формат строки, которую можно передавать и хранить, и наоборот.
Процесс преобразования данных в формат JSON называется сериализацией. Он включает в себя преобразование данных в серию байтов для хранения или передачи в сети. Противоположный процесс — десериализация — включает декодирование данных из формата JSON обратно в полезную форму в Python.
Научиться работать в Python можно на курсе «Python-разработчик». За 10 месяцев студенты освоят востребованную IT-профессию с нуля, научатся кодить, применять различные форматы и библиотеки, создавать веб-приложения и не только. После прохождения курса выпускники получат диплом о профессиональной переподготовке и помощь при трудоустройстве.
Формат JSON был впервые предложен в 2001 году американским программистом Дугласом Крокфордом. Но чтобы понять, как появился JSON, стоит немного отойти назад — к появлению языка JavaScript и стандартов обмена данными на ранних этапах развития интернета.
В начале 2000-х годов веб состоял из статических страниц. Передача данных между клиентом и сервером происходила медленно и неэффективно. Для обмена информацией часто использовался XML — мощный, но громоздкий формат, который требовал большого количества кода. С развитием технологий появилась потребность в более простом и лёгком формате, который понятен людям, быстро читается и сохраняется, обрабатывается браузером и при этом может поддерживать сложные структуры данных.
В то время JavaScript уже был стандартом для работы с веб-интерфейсами. Разработчики искали способы обмениваться данными между браузером и сервером без перезагрузки страницы. Таким образом появилась технология AJAX (Asynchronous JavaScript and XML).
Проблема была в том, что XML сложно обрабатывать в JS, нужно было использовать DOM-парсеры, писать много кода. Альтернативой стало использование литералов объектов JavaScript — структур, которые можно было легко преобразовывать в объекты JS и обратно. Это и стало основой JSON.
Дуглас Крокфорд выступил архитектором и популяризатором формата. В 2001 году он опубликовал первую спецификацию JSON на своём сайте, где описал его структуру и принципы. Формат быстро подхватили компании, которые занимались AJAX-запросами, например Google и Yahoo!.
JSON стал популярным благодаря простоте и универсальности. Он поддерживается большинством современных языков программирования. Например, JSON поддерживается JavaScript, Java, PHP, Ruby, C# и другими языками. В Python модуль JSON обозначен как `json`.
Он помогает:
● получать данные от сторонних сервисов (например, REST API);
● отправлять данные на сервер;
● сохранять структурированные данные локально;
● обрабатывать данные в удобном виде (словари, списки).
Модуль `json` в Python и его синтаксис
Модуль `json` предоставляет функционал для сериализации и десериализации данных между Python и JSON. Он входит в стандартную библиотеку Python, поэтому устанавливать его не нужно. Вот основные функции модуля:
Синтаксис JSON такой же, как в JavaScript: ключ — значение. Например, ключом может быть "name", а значением — "John". Также в JSON используются такие элементы, как объект и массив.
Преобразование объектов Python в JSON нужно при работе с данными API или при неисправностях. Модуль Python JSON предоставляет инструменты для сериализации объектов Python на строки JSON. Для этого применяют функцию json.dumps (). Она принимает объект Python в качестве ввода и возвращает форматированную строку JSON.
Представим, что на сайте есть анкета. Пользователь должен ввести в неё свои данные: имя, возраст и место проживания. Эту информацию нужно сохранить. Для этого преобразуем данные ввода в JSON:
Представьте, что вы получили информацию о пользователе и её нужно сохранить в словарь Python. Для этого понадобится метод json.load () и json.loads (). Возьмём данные из примера выше: имя, возраст и город. Код будет таким:
Иногда в формате JSON нужно сохранить данные за пределами Python — например, чтобы использовать их в других системах. Для этого применяют функцию json.dump (). Обратите внимание: выше мы применяли функцию json.dumps () с окончанием s. Для работы с файлами функция не содержит s. Вот как это выглядит в коде:
Пример применения функции json.dump (). Источник
Как и у любого формата, при работе с JSON могут возникать ошибки, которые приводят к сбоям в работе программы или некорректной обработке данных. Чаще всего встречаются ошибки синтаксиса и сериализации/десериализации. Расскажем о них подробнее.
● Синтаксические ошибки. Это самые распространённые ошибки, которые возникают при написании или чтении JSON-файла или строки. JSON имеет строгую структуру, и даже небольшая опечатка может сделать файл недействительным (invalid).
● Ошибки сериализации и десериализации. Сериализация — это процесс преобразования объектов программы в строку JSON. Десериализация — наоборот: преобразование строки JSON в объект программы. Выше мы описывали, как происходят эти процессы. Ошибка может произойти на любом из этих этапов. Например, при сериализации код может не работать, если указать тип, который не поддерживается JSON. При десериализации ошибка может возникнуть при неправильном синтаксисе или когда указана цифра вместо строки.
Также при использовании JSON часто встречаются ошибки передачи данных. Они возникают на этапе, когда JSON отправляется между клиентом и сервером в виде строки. Например, ошибки могут возникнуть в случае некорректного заголовка Content-Type, если не указана правильная кодировка, код содержит недополученные или повреждённые данные.
Рассмотрим два примера применения JSON в Python: чтение файла и запись в файл.
Читать также: