JSON
Экспресс-тур по JSON: типы значений, объекты, массивы, вложенность, синтаксис, экранирование, частые ошибки и JSON Schema за 8 минут.
JSON (JavaScript Object Notation) — это текстовый формат обмена данными. Он простой, человекочитаемый и понятен почти любому языку программирования. За 8 минут разберём все элементы формата: типы значений, объекты, массивы, вложенность, правила синтаксиса, экранирование и частые ошибки.
1. Что такое JSON и где применяется
JSON используют для обмена данными между сервером и клиентом (ответы API), для конфигурационных файлов и для хранения структурированных данных. Документ — это одно значение: чаще всего объект или массив.
{
"user": "Anna",
"age": 25,
"isAdmin": false
}
2. Типы значений
В JSON всего шесть типов: строка (в двойных кавычках), число (целое или дробное, можно с экспонентой), логическое (true/false), null, а также объект и массив (о них ниже).
{
"string": "привет",
"integer": 42,
"float": 3.14,
"negative": -7,
"exponent": 1.5e3,
"boolean": true,
"empty": null
}
3. Объекты
Объект — это набор пар «ключ: значение» в фигурных скобках { }. Ключ — всегда строка в двойных кавычках, после ключа идёт двоеточие, пары разделяются запятыми. Порядок ключей не важен.
{
"id": 101,
"name": "Ноутбук",
"price": 59990,
"inStock": true
}
4. Массивы
Массив — упорядоченный список значений в квадратных скобках [ ]. Элементы могут быть любого типа, в том числе объектами.
{
"numbers": [1, 2, 3, 4, 5],
"tags": ["новинка", "скидка"],
"mixed": [1, "два", true, null],
"users": [
{ "id": 1, "name": "Иван" },
{ "id": 2, "name": "Мария" }
]
}
5. Вложенность
Значения можно вкладывать друг в друга на любую глубину: объекты внутри объектов, массивы объектов внутри объекта. Так описывают реальные структуры данных.
{
"order": {
"id": "A-1024",
"customer": {
"name": "Пётр Смирнов",
"address": {
"city": "Москва",
"zip": "101000"
}
},
"items": [
{ "title": "Мышь", "qty": 2, "price": 1200 },
{ "title": "Клавиатура", "qty": 1, "price": 3500 }
],
"paid": true
}
}
6. Правила синтаксиса
Запомни главное: строки и ключи — только в двойных кавычках; пары и элементы разделяются запятыми; запятая после последнего элемента запрещена (нет trailing comma); комментарии в JSON не поддерживаются. Ниже — корректный документ.
{
"name": "конфиг",
"version": 2,
"features": ["a", "b", "c"],
"enabled": true
}
7. Экранирование в строках
Внутри строк специальные символы экранируются обратным слешем: \" — кавычка, \\ — слеш, \n — перевод строки, \t — табуляция, \uXXXX — символ по Unicode-коду.
{
"quote": "Он сказал: \"привет\"",
"path": "C:\\Users\\Anna",
"multiline": "первая строка\nвторая строка",
"tabbed": "колонка1\tколонка2",
"smile": "☺"
}
8. Типичные ошибки
Чаще всего ломают JSON: одинарные кавычки вместо двойных, лишняя запятая в конце, незакрытые скобки и комментарии. Так делать нельзя (этот фрагмент невалиден и приведён как пример ошибок):
{
'name': 'Anna',
"tags": ["a", "b",],
"items": [1, 2, 3
}
А вот исправленный валидный вариант:
{
"name": "Anna",
"tags": ["a", "b"],
"items": [1, 2, 3]
}
9. JSON на практике
Типичный ответ API: статус, данные и метаинформация.
{
"status": "ok",
"data": {
"id": 7,
"title": "Статья про JSON",
"author": "redaktor",
"tags": ["json", "web"]
},
"meta": {
"page": 1,
"total": 128
}
}
Типичный конфигурационный файл приложения:
{
"appName": "codechick",
"debug": false,
"server": {
"host": "localhost",
"port": 8888
},
"allowedHosts": ["localhost", "127.0.0.1"]
}
10. JSON Schema кратко
JSON Schema — это сам JSON, который описывает структуру другого JSON: какие поля обязательны, какого они типа и в каких пределах. По схеме можно автоматически валидировать данные.
{
"type": "object",
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name", "age"]
}
Такая схема считает валидным объект { "name": "Anna", "age": 25 } и отвергает { "name": "Anna" } — потому что отсутствует обязательное поле age.