Модуль JSON

Работа с JSON позволяет реализовать задачи, связанные с обменом данными между сервером и клиентом. Это очень важная составляющая современного программирования, поскольку все связано с интернетом. И все меньше приложений используют исключительно оффлайн функционал. Поэтому сегодня мы разберемся в том, что дает JSON пользователю, зачем он нужен и как с ним работать в рамках языка Python.

Что такое JSON?

JSON – это формат обмена данными, в основе которого лежит язык программирования JavaScript. Но его характерное преимущество в том, что этот формат интегрирован с любыми языками, в том числе и с Python. Это означает, что эти команды можно использовать где-угодно.

Давайте вкратце рассмотрим, как устроен JSON. В качестве значений используется:

  1. JSON-объект. 
  2. Массив.
  3. Число (целое или вещественное).
  4. Литералы True и False, а также – null.
  5. Строка.

Поскольку последние три значения интуитивно понятно, то разберем особенности объектов и массивов.

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

Примеры использования JSON:

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

Объекты JSON

Давайте попробуем взять пример из документации подсказок по ФИО. 

{

  "query": "Виктор Иван",

  "count": 7

}

Эта запись означает следующее: у нас есть объект, который заключен в фигурные скобки. Это – его характеристика. Открытая скобка означает начало записи объекта, а закрытая – его конец.

JSON-объект напоминает словарь в Python, поскольку содержит пары ключа и значения. В качестве ключа выступает имя параметра, которое передается серверу. По ключу система может найти нужное значение. Без подсказки она неспособна это сделать. 

То есть, что такое «Виктор Иван»? А, так это запрос, ведь об этом в ключе написано. Приблизительно так все и работает.

Для большего понимания, это можно сравнить с тем, как если бы мы ввели эту строку в поле ввода. Например, в поисковую систему. После того, как мы начинаем вводить туда какое-то значение, появляется всплывающий список с возможными значениями. Это означает, что создатель приложения предусмотрел условие – на каждый ввод символа выполнять определенное действие. 

Если мы нажмем на кнопку F12 на клавиатуре (в браузере), то появится панель разработчика. И во вкладке Network мы можем посмотреть запросы, которые отправляются на сервер.Модуль JSON

О, так это же та строка, которую мы приводили в качестве примера выше. Ура. Обратите внимание на то, что внутри этого запроса есть два параметра: query – это строка, по которой осуществляется поиск того, что пользователь указал в интерфейсе.

А count – это количество подсказок. Если говорить про Дадату, то этот параметр встроен в форму, поэтому всегда возвращается 7 подсказок. Если же напрямую их дергать, то тогда возможна смена значения.

Обратите внимание на запятые, которыми разделяются пары «ключ и значение». Они необходимы для того, чтобы система понимала, что это отдельные объекты.

Массив JSON

Теперь давайте разберемся с тем, что такое массив. Точно так же, как и в предыдущем разделе, начнем с примера, чтобы было более понятно.

Вот пример массива JSON.

[ “MALE”, “FEMALE” ]

Обратите внимание на то, что он заключен в квадратные скобки. В качестве ключа здесь выступает номер элемента. Этот набор значений уже упорядоченный. Следовательно, изменение данных местами внутри невозможно. Но кое-что общее со объектом есть – значения разделяются с помощью запятых.

В качестве элементов массива могут использоваться любые значения: цифры, строки или же их смесь. 

[ 1, 5, 10, 33 ]

[ "MALE", "FEMALE" ]

[ 1, "Андрюшка",  10, 33 ]

В качестве элементов массива могут использоваться даже объекты.

[1, {a:1, b:2}, “такой вот массивчик”]

И даже очень сложные последовательности значений. 

[

        {

            "value": "Иванов Виктор",

            "unrestricted_value": "Иванов Виктор",

            "data": {

                "surname": "Иванов",

                "name": "Виктор",

                "patronymic": null,

                "gender": "MALE"

            }

        },

        {

            "value": "Иванченко Виктор",

            "unrestricted_value": "Иванченко Виктор",

            "data": {

                "surname": "Иванченко",

                "name": "Виктор",

                "patronymic": null,

                "gender": "MALE"

            }

        },

        {

            "value": "Виктор Иванович",

            "unrestricted_value": "Виктор Иванович",

            "data": {

                "surname": null,

                "name": "Виктор",

                "patronymic": "Иванович",

                "gender": "MALE"

            }

        }

]

В этом случае системой возвращается массив из подсказок. Сколько было запрошено в параметре count, столько и было получено. Все честно. 

Каждая подсказка являет собой объект, внутри которого также находится объект. Эдакая матрешка. Причем уровней вложенности может быть столько, сколько нужно. Объект внутри массива, который в свою очередь находится внутри массива массива еще одного объекта. В общем, как душе угодно. 

Как использовать JSON в Python?

Чтобы применять JSON в Python, используется специальный модуль, который отвечает за это. Его мы можем использовать для работы с JSON.

import json

Как перевести данные из формата JSON в Python

Для этого необходимо использовать метод json.loads(). В результате, мы получим словарь Python. Давайте приведем пример для наглядности. 

import json




# немного JSON:

x = '{"name":"Viktor", "age":30, "city":"Minsk"}'

# парсинг x:

y = json.loads(x)

# результатом будет словарь Python:

print(y["age"])

В этом случае будет возвращено значение 30 , поскольку мы запросили возраст человека. 

Как провести конвертацию из Python в JSON?

Если вы уже имеете объект Python, то можете сконвертировать его в формат jSON, используя метод json.dumps()

import json




# создаем словарь x:

x = {

"name": "Viktor",

"age": 30,

"city": "Minsk"

}

# конвертируем в JSON: 

y = json.dumps(x)

# в результате получаем строк JSON:

print(y)

В результате выполнения этой строки будет выведена следующая строка:

{“name”: “Viktor”, “age”: 30, “city”: “Minsk”}

В строки JSON можно преобразовывать целый спектр объектов.

  • dict
  • list
  • tuple
  • string
  • int
  • float
  • True
  • False
  • None

Давайте попробуем конвертировать некоторые объекты в строки JSON и вывести получившиеся значения. 

import json

  

print(json.dumps({"name": "Viktor", "age":  30}))

print(json.dumps(["Porsche", "BMW"]))

print(json.dumps(("Porsche", "BMW")))

print(json.dumps("hello"))

print(json.dumps(42))

print(json.dumps(31.76))

print(json.dumps(True))

print(json.dumps(False))

print(json.dumps(None))

Когда мы попробуем выполнить конвертацию, произойдет автоматическое преобразование объектов Python в эквивалент JSON.

Python JSON
dict Object
list Array
tuple Array
str String
int Number
float Number
True true
False false
None null

А теперь попробуем сконвертировать объект Python. 

import json




x = {

"name": "Viktor",

"age": 30,

"married": True,

"divorced": False,

"children": ("Anna","Bogdan"),

"pets": None,

"cars": [

{"model": "BMW 230", "mpg":  27.5},

{"model": "Ford Edge", "mpg": 24.1}  

]

}

print(json.dumps(x))

Конвертация кириллицы

Если в информации есть кириллические символы, то тогда может быть потеряна. Чтобы ее сохранить, необходимо задать параметр False для ensure_ascii

import json




x = {

"name": "Виктор"

}

y = {

"name": "Виктор"

}

print(json.dumps(x))

print(json.dumps(y, ensure_ascii=False))

В результате, появится следующее значение.

{“name”: “\u0412\u0438\u043a\u0442\u043e\u0440”}

{“name”: “Виктор”}

Форматирование результата

Ранее мы привели пример вывода строки JSON. Чтобы сделать чтение результатов более удобным и легким, используются отступы и переносы строк. Метод json.dumps() имеет ряд параметров, которые делают чтение результата более легким. 

Давайте применим параметр indent, чтобы определить количество отступов. 

json.dumps(x, indent=4) 

Также можно задать разделители, которые по умолчанию. Здесь запятая и пробел нужны, чтобы разделить объекты между собой, а двоеточие и пробел – для разделения ключей и значений.

Чтобы изменить разделитель по умолчанию, необходимо использовать separators

json.dumps(x, indent=4, separators=(“. “, ” = “))

Упорядочение результата

С помощью метода json.dumps() мы можем задавать порядок ключей в результате. Для этого используется параметр sort_keys, с помощью которого сортируется результат. 

json.dumps(x, indent=4, sort_keys=True)

Преимущества JSON

Чем же этот формат передачи данных полюбился многим? Да так, что он используется во всех языках программирования! Он имеет ряд существенных преимуществ:

  1. Компактность. Чтобы передать большой объем информации, не требуется много кода. 
  2. Код JSON может составляться как человеком, так и компьютером. Это упрощает разработку приложений.
  3. Его структура соответствует структуре большинства существующих языков программирования. Так, в нем есть числа, строки, логические переменные, массивы, объекты (которые соответствуют словарям в Python), и так далее.
  4. Есть отдельная библиотека Python, которая предназначена для чтения структур этого языка. Да и сам факт, что он совместим со всеми языками программирования – уже преимущество. 
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

двенадцать − семь =

Adblock
detector