раздел 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 их не понимает.