Парсинг JSON

Модуль json из стандартной библиотеки языка программирования Python является достаточно эффективным средством для взаимодействия с форматом JavaScript Object Notation. Функции данного модуля позволяют легко кодировать и декодировать информацию, работая с разными JSON-объектами. Это значительно повышает удобство создания веб-приложений в Python.

Что такое JSON?

JSON (JavaScript Object Notation) является чрезвычайно распространенным форматом данных, которые представлены в текстовом виде. Как можно догадаться из названия, JSON изначально основывается на популярном языке программирования JavaScript, но несмотря на это отлично работает на разных платформах, благодаря своей универсальности и простоте. Данный формат предоставляет программисту возможность осуществлять сериализацию структур информации для последующей передачи между приложениями. Примером тому вполне может быть обмен текстовыми сведениями о клиентах в интернет-магазине между браузером и сервером.

Информация в формате JSON может быть представлена в двух видах:

  • Последовательность пар с ключами и соответствующими им значениями;
  • Просто упорядоченный набор значений.

Как правило, любой высокоуровневый язык программирования поддерживает эти структуры данных. Значения, которые передаются в JSON, могут являться объектами, строками, числами, одномерными массивами, а также литералами (true, false, null). Python поддерживает работу с форматом JSON, благодаря модулю json и методам по кодированию и декодированию данных. Это позволяет легко получать и отправлять информацию в комфортном для чтения виде.

Сохранение данных в JSON

Чтобы записать информацию в формате JSON с помощью средств языка Python, нужно прежде всего подключить модуль json, воспользовавшись командой import json в начале файла с кодом программы. Метод dumps отвечает за автоматическую упаковку данных в JSON, принимая при этом переменную, которая содержит всю необходимую информацию. В следующем примере демонстрируется кодирование словаря под названием dictData. В нем имеются некие сведения о пользователе интернет-портала, такие как идентификационный код, логин, пароль, полное имя, номер телефона, адрес электронной почты и данные об активности. Эти значения представлены в виде обычных строк, а также целых чисел и булевых литералов True/False.

import json
dictData = { "ID"       : 210450,
             "login"    : "admin",
             "name"     : "John Smith",
             "password" : "root",
             "phone"    : 5550505,
             "email"    : "smith@mail.com",
             "online"   : True }
jsonData = json.dumps(dictData)
print(jsonData)

{"ID": 210450, "login": "admin", "name": "John Smith", "password": "root", "phone": 5550505, "email": "smith@mail.com", "online": true}

Результат выполнения метода dumps передается в переменную под названием jsonData. Таким образом, словарь dictData был преобразован в JSON-формат всего одной строчкой. Как можно увидеть, благодаря функции print, все сведения были закодированы в своем изначальном виде. Стоит заметить, что данные из поля online были преобразованы из литерала True в true.

С помощью Python сделаем запись json в файл. Для этого дополним код предыдущего примера следующим образом:

with open("data.json", "w") as file:
    file.write(jsonData)

Подробнее про запись данных в текстовые файлы описано в отдельной статье на нашем сайте.

Разбор JSON данных

Обратную операцию по быстрому раскодированию JSON-формата при помощи средств языка Python выполняет встроенный метод loads. С его помощью можно легко преобразовать JSON в объект, с которым можно свободно взаимодействовать в программе. Приведенный немного ниже пример демонстрирует создание аналогичного JSON-объекта, где имеется информация о пользователе. Передавая переменную jsonData в качестве параметра методу loads, на выходе можно получить словарь dictData. И уже из него мы можем получить все необходимые данные. Как видно из примера, print выводит отдельные поля dictData, такие, как полное имя, номер телефона, адрес электронной почты и информацию об активности.

import json
jsonData = """ {
    "ID"       : 210450,
    "login"    : "admin",
    "name"     : "John Smith",
    "password" : "root",
    "phone"    : 5550505,
    "email"    : "smith@mail.com",
    "online"   : true
} """
dictData = json.loads(jsonData)
print(dictData["name"])
print(dictData["phone"])
print(dictData["email"])
print(dictData["online"])

John Smith
5550505
smith@mail.com
True

Как и в примере с кодировкой данных в JSON, литерал true был автоматически преобразован к True для того, чтобы с ним можно было работать при помощи средств языка Python. Следует заметить, что функции dumps и loads способны взаимодействовать и с более сложными видами объектов, включая вложенные разновидности словарей с множеством строковых значений.

Таким образом осуществляется кодирование и декодирование данных в формате JSON за счет встроенных средств языка программирования Python. Как можно было заметить, эти операции выполняются довольно просто, благодаря удобным методам dumps и loads из модуля json.