JSON (JavaScript Object Notation — нотация объектов JavaScript) — текстовый формат обмена данными на основе пар «ключ-значение». Создал его Дуглас Крокфорд в начале 2000-х на основе синтаксиса JavaScript. Сегодня JSON — де-факто стандарт для REST API (интерфейса взаимодействия клиента и сервера поверх HTTP) и один из самых распространённых форматов хранения и передачи данных.
Три свойства объясняют такую популярность: JSON легко читает человек без специальных инструментов, быстро разбирает машина и занимает значительно меньше места, чем XML, — потому что не дублирует имена полей в открывающем и закрывающем тегах. Нативная (встроенная) поддержка есть в каждом современном языке: JavaScript, Python, Java, PHP, Go, Ruby, C#.
Учитесь бесплатно за счёт государства
Экономия до 100 000 ₽ на любой программе
В статье разберём устройство JSON, синтаксис объектов и массивов, работу с форматом в JavaScript и Python, правила валидации, онлайн-инструменты для отладки и ключевые угрозы безопасности при передаче данных.
JSON — это не язык программирования и не протокол. Это способ записать структурированные данные в виде обычного текста так, чтобы любая система могла их прочитать, отправить и воспроизвести без потерь.

Дуглас Крокфорд разработал формат в начале 2000-х: он наблюдал, как разработчики передают данные между браузером и сервером через громоздкие конструкции, и предложил более лёгкое решение на основе синтаксиса объектных литералов JavaScript. Правила оказались простыми: только двойные кавычки, шесть допустимых типов данных, никаких комментариев. Сегодня JSON стандартизирован в RFC 8259 — официальном документе с формальной грамматикой формата.
Где используется JSON:
Формат поддерживается во всех перечисленных языках через встроенные или стандартные библиотеки — именно это делает JSON универсальным: данные сериализуются (преобразуются в строку) на одной стороне и десериализуются (разбираются в объект) на другой без сторонних конвертеров.
Когда браузер запрашивает ленту новостей, сервер возвращает JSON-массив статей. Когда мобильное приложение отправляет заказ, тело HTTP-запроса — тоже JSON. Знание синтаксиса формата — базовое требование для разработчика и аналитика данных.
JSON строится из двух базовых конструкций: объектов и массивов. Они вкладываются друг в друга на произвольную глубину, образуя сложные иерархические структуры. Значениями могут быть шесть строго определённых типов.

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

Пример — профиль пользователя:
{
«name»: «Иван Петров»,
«age»: 32,
«isActive»: true,
«roles»: [«admin», «editor»]
}
Типичные ошибки: ключ без кавычек (name: вместо «name»:) и лишняя запятая после последней пары («isActive»: true,). Оба варианта делают JSON невалидным — парсер (программа разбора текста) выдаст ошибку и остановится.
JSON-объекты применяют для профилей пользователей, данных заказов и ответов API. Почти любой ответ REST-сервера содержит один или несколько вложенных объектов.
JSON-массив — упорядоченный список значений в квадратных скобках [ ]. У элементов нет ключей: доступ осуществляется по числовому индексу, начиная с нуля.
В массиве могут стоять строки, числа, объекты и другие массивы:
[«яблоко», «груша», «банан»]
[
{«id»: 1, «product»: «Ноутбук», «price»: 85000},
{«id»: 2, «product»: «Мышь», «price»: 2500}
]
Массивы применяют для списков товаров, истории действий пользователя, наборов тегов и подписок. Массив объектов — стандартный способ передать коллекцию записей из API.
JSON поддерживает шесть типов данных:
Правило простое: только строки берутся в двойные кавычки. Числа, логические значения и null — без кавычек.
JSON — не единственный текстовый формат обмена данными. XML появился раньше, YAML удобнее для конфигурационных файлов. У каждого формата своя ниша.
| Параметр |
JSON |
XML |
YAML |
|---|---|---|---|
| Синтаксис | Пары «ключ-значение», { } и [ ] | Открывающие и закрывающие теги | Отступы и двоеточия |
| Вес | Лёгкий | Тяжёлый (теги дублируются) | Средний |
| Читаемость | Хорошая | Умеренная | Высокая |
| Комментарии | Нет | Да (<!— —>) | Да (#) |
| Применение | REST API, веб-приложения | SOAP, банковские системы | Kubernetes, Docker Compose |
JSON против XML. XML дублирует имя поля в открывающем и закрывающем теге: <name>Иван</name>. В JSON то же поле занимает вдвое меньше символов: «name»: «Иван». При передаче тысяч записей разница в размере ощутима.
JSON против YAML. YAML читается проще — без скобок и кавычек. Но он критичен к отступам: один лишний пробел ломает документ. JSON синтаксически строже, поэтому предсказуемее при автоматической обработке.
Вывод: JSON оптимален для REST API и передачи данных между системами. YAML — стандарт для DevOps-конфигурационных файлов (Kubernetes, Docker). XML остаётся в SOAP (протоколе обмена структурированными сообщениями) и устаревших банковских системах, где нужны атрибуты тегов.
Освоить работу с форматами данных, API и аналитическими инструментами можно в рамках федерального проекта «Активные меры содействия занятости» — каталог IT-программ включает обучение аналитике и работе с информационными системами: онлайн, без отрыва от работы, бесплатно.
JSON поддерживается нативно в JavaScript и через встроенный модуль в Python. Два ключевых процесса: сериализация — объект превращается в JSON-строку для передачи — и десериализация — полученная строка разбирается обратно в объект. Для обоих процессов сторонние библиотеки не нужны.

В JavaScript работа с JSON встроена в язык — глобальный объект JSON доступен без импортов.

JSON.parse(jsonString) — десериализация: принимает строку JSON, возвращает объект или массив. JSON.stringify(object) — сериализация: принимает объект, возвращает строку JSON.
// Десериализация — строка → объект
const data = JSON.parse(‘{«name»:»Иван»,»age»:32}’);
console.log(data.name); // «Иван»
// Сериализация — объект → строка с отступами
const user = { name: «Анна», age: 28 };
const jsonStr = JSON.stringify(user, null, 2);
Параметр null, 2 в JSON.stringify() добавляет отступы для читаемости — удобно при отладке. При отправке данных через API используйте JSON.stringify(user) без параметров: лишние пробелы только увеличивают размер запроса.
Стандартный сценарий: получить ответ API → распарсить через JSON.parse() → работать с объектом → сериализовать через JSON.stringify() и отправить обратно.
В Python модуль json входит в стандартную библиотеку — дополнительная установка не нужна.

json.loads(string) — десериализует строку JSON в словарь Python. json.dumps(dict, indent=4) — сериализует словарь в строку JSON; параметр indent задаёт отступы.
import json
# Десериализация: строка → словарь
raw = ‘{«name»: «Иван», «age»: 32}’
data = json.loads(raw)
print(data[«name»]) # Иван
# Сериализация: словарь → строка JSON
user = {«name»: «Анна», «age»: 28}
json_str = json.dumps(user, ensure_ascii=False, indent=2)
Для работы с файлами используйте json.load(file) при чтении и json.dump(data, file) при записи:
Хотите сменить профессию или повысить квалификацию?
Федеральный проект «Активные меры содействия занятости» даёт возможность пройти обучение бесплатно за счёт государства
with open(«data.json», encoding=»utf-8″) as f:
config = json.load(f)
Параметр ensure_ascii=False сохраняет кириллицу в читаемом виде, а не в виде экранированных последовательностей вроде \u0418\u0432\u0430\u043d.
Создать JSON-файл можно в любом текстовом редакторе: напишите валидную структуру JSON, сохраните файл с расширением .json в кодировке UTF-8. RFC 8259 явно требует UTF-8 — другая кодировка может вызвать ошибки при обработке кириллицы на стороне сервера.

Через код — проще и надёжнее:
import json
data = {«project»: «Аналитика», «version»: 1}
with open(«config.json», «w», encoding=»utf-8″) as f:
json.dump(data, f, ensure_ascii=False, indent=2)
Чем открыть JSON-файл:
Visual Studio Code подсвечивает JSON нативно, отображает ошибки в реальном времени и справляется с большими конфигурационными файлами и ответами API — это рекомендованный инструмент для повседневной работы.
Одна опечатка делает весь JSON-документ невалидным. Парсер не восстанавливает повреждённые данные — он выдаёт ошибку и останавливается. Проверка работает на двух уровнях: синтаксис (структура правильная?) и схема (данные соответствуют ожидаемому формату?).
Согласно RFC 8259, корректный JSON-документ должен выполнять четыре правила:

Типичные синтаксические ошибки, которые ломают парсинг JSON:
Проверить JSON онлайн можно на jsonlint.com или через w3schools JSON Validator. В VS Code ошибки подсвечиваются красным автоматически — ещё до запуска кода.
JSON Schema — описание правил структуры JSON-документа: какие поля обязательны, какой у них тип, какие ограничения по значению.
Три основных сценария применения:
Для валидации по схеме используют Ajv в JavaScript и jsonschema в Python. Пример схемы:
{
«type»: «object»,
«properties»: {
«name»: { «type»: «string» },
«age»: { «type»: «integer», «minimum»: 0 }
},
«required»: [«name», «age»]
}
Актуальная распространённая версия стандарта — JSON Schema Draft-07. JSON Schema не входит в RFC 8259 — это отдельная спецификация, развивающаяся поверх основного формата.
Онлайн-инструменты удобны для быстрой проверки и форматирования JSON прямо в браузере — без переключения в IDE (интегрированную среду разработки).
| Инструмент |
Функция |
Бесплатно |
|---|---|---|
| jsonlint.com | Валидация синтаксиса и подсветка ошибок | Да |
| jsonformatter.org | Форматирование, минификация, tree-view | Да |
| jsondiff.com | Сравнение двух JSON-документов | Да |
| w3schools JSON Validator | Валидация с объяснением ошибок | Да |
Типичный сценарий: скопировали ответ API → вставили в форматировщик → получили JSON с отступами и понятной структурой. Или сравниваете две версии конфигурационного файла через diff-инструмент перед деплоем (развёртыванием приложения).
Postman — инструмент для тестирования REST API — содержит встроенный форматировщик JSON и поддерживает JSONPath-фильтры: можно извлечь конкретное поле из ответа прямо в интерфейсе без написания дополнительного кода.
JSON кажется безопасным форматом — это просто текст. Но данные из JSON нередко попадают в браузер, SQL-запросы или базу данных без должной проверки. Три основных угрозы:

JSON Injection. Атака, при которой злоумышленник вставляет в JSON-запрос поле «isAdmin»: true. Если сервер не проверяет структуру входящих данных, пользователь получает права администратора. Защита: валидация через JSON Schema с помощью Ajv или jsonschema — схема отклонит любое поле, не входящее в белый список.
Межсайтовый скриптинг (XSS, Cross-Site Scripting). Если значение из JSON вставляется в DOM (объектную модель документа) через innerHTML, браузер может выполнить вредоносный скрипт, встроенный в строку. Защита: использовать textContent вместо innerHTML; обрабатывать ненадёжный ввод через DOMPurify — библиотеку санитизации (очистки) HTML.
SQL-инъекции через JSON. Данные из JSON-поля без экранирования попадают в SQL-запрос и изменяют его логику. Защита: параметризованные запросы (prepared statements) — никогда не вставляйте значения из JSON в SQL-строку через конкатенацию.
Общее правило: любые данные, пришедшие от клиента в формате JSON, считаются ненадёжными. Ajv, DOMPurify и prepared statements закрывают большинство векторов атак.
JSON компактнее XML: в XML название поля дублируется в открывающем и закрывающем теге — <name>Иван</name>, в JSON — один раз: «name»: «Иван». При передаче тысяч записей разница в весе ощутима. JSON быстрее передаётся по сети и проще разбирается. XML остаётся обязательным в SOAP и унаследованных банковских системах, где требуется сложная структура с атрибутами тегов.
Нет. Стандартный JSON не поддерживает комментарии — это требование RFC 8259. Если комментарии нужны при разработке, используйте JSON5 (устанавливается через npm install json5): он допускает // и /* */, одинарные кавычки и завершающие запятые. Но JSON5 несовместим с парсерами стандартного JSON — не применяйте его в production API.
Для небольших файлов подойдёт онлайн-сервис csvjson.com. В Excel — «Данные → Получить данные → Из файла → JSON». В Python через pandas: pd.read_json(‘file.json’).to_excel(‘file.xlsx’). Для автоматизации и больших объёмов выбирайте pandas: он гибче и работает в пакетном режиме.
JSONB — двоичный (бинарный) тип PostgreSQL: данные разбираются при записи, хранятся в структурированном виде и поддерживают GIN-индексы (обобщённые инвертированные индексы). Тип JSON хранит данные как текст и разбирает их при каждом запросе. Выбирайте JSONB, если часто ищете или фильтруете по вложенным полям — это ускоряет выборку на порядки.
JSONPath — язык запросов к JSON-структурам, аналог XPath для XML. Синтаксис: $ — корень документа, .field — поле объекта, [N] — элемент массива по индексу. Пример: $.user.name — извлечь имя пользователя из вложенного объекта. JSONPath используется в Postman для извлечения значений из ответов API и в тестовых фреймворках для автоматических проверок результатов.
Онлайн: jsonlint.com или w3schools JSON Validator — вставляете JSON, нажимаете «Validate». В VS Code встроенная проверка подсвечивает ошибки автоматически. В JavaScript оберните JSON.parse() в блок try/catch; в Python — json.loads() выбрасывает исключение JSONDecodeError при синтаксической ошибке. Частая причина ошибки — лишняя запятая после последнего элемента объекта или массива.
JSON5 расширяет синтаксис: разрешены комментарии (// и /* */), одинарные кавычки, завершающие запятые, ключи без кавычек, значения Infinity и NaN. Устанавливается через npm install json5. JSON5 удобен в конфигурационных файлах при разработке, но несовместим с парсерами стандартного JSON — не используйте в production REST API.
Клиент отправляет HTTP-запрос с заголовком Content-Type: application/json и телом в формате JSON. Сервер возвращает ответ тоже в JSON. Перед отправкой объект сериализуется — JSON.stringify() в JavaScript, json.dumps() в Python, — после получения десериализуется. REST API предпочитает JSON перед XML из-за меньшего размера, простоты парсинга и нативной поддержки в браузере.
Сериализация — преобразование объекта в памяти в JSON-строку для передачи или хранения: JSON.stringify() в JavaScript, json.dumps() в Python. Десериализация — обратный процесс: строка разбирается в объект — JSON.parse() в JavaScript, json.loads() в Python. Оба процесса выполняются встроенными средствами без сторонних библиотек.
Да — для небольших проектов и конфигурационных файлов это удобно. Чтение в Node.js: JSON.parse(fs.readFileSync(‘data.json’, ‘utf-8’)). В Python: json.load(f) внутри блока with open(). При росте объёма данных или необходимости сложных выборок переходите на PostgreSQL с типом JSONB — он поддерживает GIN-индексы и ускоряет поиск по вложенным полям JSON.
Подайте заявку —
забронируйте место в группе
45 000 мест на 2026 год. Бесплатное обучение по федеральному проекту «Активные меры содействия занятости»