Найти тему
0808

Что такое JSON — Введение

JSON или JavaScript Object Notation — текстовый формат обмена данными, основанный на JavaScript. Но при этом он может использоваться в любом языке программирования. Формат был разработан Дугласом Крокфордом.

JSON используется в REST API. Также в качестве альтернативы можно использовать XML, но разработчики больше предпочитают именно JSON, так как он более читабельный и меньше весит.

Как устроен JSON

В качестве значений в JSON могут быть использоваться:

  • числа;
  • строки;
  • массивы;
  • JSON-объекты;
  • литералы (логические значения true, false и null).

С простыми значениями не возникнет никаких трудностей. Разберём массивы и JSON-объекты, ведь, по сути, придётся работать именно с ними.

JSON-объект

JSON-объект — это неупорядоченное множество пар «ключ:значение», заключённых в фигурные скобки { }  и взаимодействие с ним проходит, как со словарем.

Ключ — это название параметра (свойства), который мы передаём серверу. Он служит маркером для принимающей запрос системы, чтобы она поняла, что мы ей отправили.

Давайте рассмотрим простой пример:

{
"name": "John",
"age": 26
}

Мы передали значение "John" с ключом "name", чтобы получить это свойство, нужно обратиться по его ключу, без которого сделать это было бы невозможно.

Значение может быть не только строкой или числом. Это может быть и другой объект! Или массив, или объект в массиве, массив в объекте… Абсолютно любое количество уровней вложенности!

Если мы говорим о параметрах, то в кавычки помещаются только строки, все остальное — нет.

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

Например, мы можем записать JSON-объект таким образом, и это тоже будет правильно:

{"name": "John","age": 26}

Ключ — ВСЕГДА строка, и мы в любом случае берём его в кавычки.

Ключи могут быть записаны в любом порядке, ведь, JSON-объект — это неупорядоченное множество пар «ключ:значение».

Если я хочу обратиться к "name", как мне это сказать? В Python есть два варианта это сделать:

  1. Получить значение с помощью метода get().
  2. Получить значение по ключу.

get() vs dict[key]

Разница между этими вариантами заключается в том, что если вы обратитесь к ключу, которого нет, то получите ошибку KeyError.

person = {
"name": "John",
"age": 26
}
print(person[“last_name”])
>>> KeyError Traceback (most recent call last)
>>> KeyError: 'last_name'

Но если воспользуетесь методом get(), то получите пустое значение:

last_name = person.get("last_name")
print(type("last_name"))
>>> NoneType

Также у этого метода есть второй передаваемый аргумент, который будет предаваться если ключа нет:

last_name = person.get("last_name", "There is no last_name")
print(last_name)
>>> 'There is no last_name'

JSON-массив

Массив заключен в квадратные скобки [ ].

["MALE", "FEMALE"]

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

Значения

Внутри массива могут быть любые значения:

  • Цифры;

[1, 5, 10, 33]

  • Строки;

["MALE", "FEMALE"]

  • Литералы;

[true, false]

  • Массивы;

["MALE", "FEMALE", [1, 5, 10, 33]]

  • Объекты;

[1, {a:1, b:2}, "John"]

  • Смесь.

[1, "John", true, [1, 5, 10, 33], {"a": 1, "b": 2}]

Well Formed JSON

JSON должен быть well formed, то есть синтаксически правильный.

Правила well formed JSON:

  1. Данные написаны в виде пар «ключ:значение»
  2. Данные разделены запятыми
  3. Объект находится внутри фигурных скобок { }
  4. Массив — внутри квадратных [ ]

Чтобы проверить JSON на синтаксис, можно использовать любой JSON Validator. Я использую JSON Formatter, он не только проверяет корректность синтаксиса, но и форматирует JSON в читабельный визуальный формат!

Из этого:

{"name": "John", "age": 26, "is_married": false, "children": { "name": "Julia", "age": null},"skills": ["Python", "Git", "Django", "Linux"]}

Он сделает вот это:

{
"name": "John",
"age": 26,
"is_married": false,
"children": {
"name": "Julia",
"age": null
},
"skills": [
"Python",
"Git",
"Django",
"Linux"
]
}

Итого

JSON (JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript, но может использоваться в любом языке программирования. Легко читается человеком и машиной. Часто используется в REST API (чаще, чем XML из-за лучшей читабельности и меньшего веса).

Корректные значения JSON:

  1. JSON-объект — неупорядоченное множество пар «ключ:значение», заключённое в фигурные скобки { };
  2. массив — упорядоченный набор значений, разделённых запятыми. Находится внутри квадратных скобок [ ];
  3. число (целое или вещественное);
  4. литералы true (логическое значение «истина»), false (логическое значение «ложь») и null;
  5. строка.