раздел 04 · подстраница 2

Объекты, массивы, вложенность

JSON собирается всего из нескольких кирпичиков. Как только вы видите их по отдельности, любая, даже громоздкая структура читается легко. Разберём кирпичики и научимся не путаться в скобках.

Кирпичики JSON

Всего шесть типов значений:

  • строка в двойных кавычках: "Анна";
  • число без кавычек: 28, 3.14;
  • логическое: true или false;
  • null - «значения нет»;
  • массив - список в квадратных скобках: ["a", "b", "c"];
  • объект - набор пар «ключ-значение» в фигурных скобках: { "name": "Анна" }.

Последние два - массив и объект - могут содержать внутри себя любые значения, включая другие массивы и объекты. Отсюда и вложенность.

Объект: фигурные скобки

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

{
  "name": "Анна",
  "age": 28,
  "active": true
}

Достать поле в коде - по имени ключа:

person["name"]   # "Анна"

Массив: квадратные скобки

Массив - это упорядоченный список. Элементы разделены запятыми, к ним обращаются по номеру (с нуля).

["купить молоко", "позвонить маме", "сдать отчёт"]
tasks[0]   # "купить молоко"
tasks[2]   # "сдать отчёт"

Вложенность: всё вместе

Реальные данные - это объекты и массивы, вложенные друг в друга. Самая частая форма - массив объектов: список однотипных записей.

{
  "user": "Анна",
  "tasks": [
    { "text": "купить молоко", "done": false, "tags": ["дом", "еда"] },
    { "text": "сдать отчёт",    "done": true,  "tags": ["работа"] }
  ]
}

Читаем по шагам, как адрес: объект, в нём ключ tasks, это массив, берём первый элемент, это объект, в нём ключ text:

data["tasks"][0]["text"]    # "купить молоко"
data["tasks"][0]["tags"][1] # "еда"

Частые ошибки синтаксиса

JSON строгий. Эти три ошибки ловят всех:

1. Лишняя запятая в конце. После последнего элемента запятая запрещена.

{ "a": 1, "b": 2, }   // ОШИБКА: запятая после 2
{ "a": 1, "b": 2 }    // правильно

2. Одинарные кавычки. В JSON только двойные.

{ 'name': 'Анна' }    // ОШИБКА
{ "name": "Анна" }    // правильно

3. Ключ без кавычек. В отличие от JavaScript, в JSON ключи всегда в кавычках.

{ name: "Анна" }      // ОШИБКА
{ "name": "Анна" }    // правильно

Как смотреть чужой JSON

API часто возвращают большие, глубоко вложенные ответы. Чтобы не тонуть:

  • открывайте JSON в редакторе, который умеет сворачивать блоки (VS Code, браузерный просмотрщик);
  • идите от корня вниз, по одному уровню;
  • не бойтесь распечатать структуру в коде - print(data.keys()) покажет, какие поля есть на верхнем уровне.

Антипаттерны

  • Делать вложенность ради вложенности. Если данные плоские - держите их плоскими. Лишние уровни усложняют доступ.
  • Хранить число как строку ("age": "28") без причины - потом придётся преобразовывать. Если это число - пишите числом.
  • Копировать JSON из чата с «умными» кавычками. Текстовые редакторы иногда меняют " на типографские кавычки - JSON их не понимает.