Что такое JSON: формат, синтаксис и примеры

Из чего состоит JSON, какие у него правила и где он встречается

JSON (JavaScript Object Notation) — текстовый формат для обмена данными: объекты с ключами и значениями, списки, строки, числа, true, false и null. Его читают и человек, и любая программа, поэтому в JSON отвечают почти все API, хранят настройки приложения и выгружают данные из CRM и маркетплейсов. JSON-файл — обычный текстовый файл с расширением .json, его можно открыть любым редактором. Формат описан в стандартах RFC 8259 и ECMA-404.

Пример JSON

Так выглядит ответ API интернет-магазина о заказе. Фигурные скобки — объект, квадратные — массив (список), слева от двоеточия ключ, справа значение.

Заказ: объект с вложенными объектами и массивом товаров
{
  "id": 1057,
  "status": "paid",
  "paid": true,
  "amount": { "value": "2490.00", "currency": "RUB" },
  "customer": { "name": "Анна Петрова", "phone": "+79991234567" },
  "items": [
    { "sku": "A-102", "title": "Кабель USB-C", "qty": 2, "price": 590 },
    { "sku": "A-117", "title": "Зарядное устройство", "qty": 1, "price": 1310 }
  ],
  "comment": null
}

В одну строку без пробелов это тот же JSON: отступы и переносы ничего не значат и нужны только человеку. Сервер обычно отдаёт сжатый вариант, а чтобы его читать, JSON форматируют — расставляют отступы. Это делает инструмент «Форматирование», а «Дерево» позволяет сворачивать вложенные блоки и копировать путь к нужному полю, например items[0].price.

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

  • Объект — { }: набор пар «ключ: значение» через запятую. Ключ — всегда строка в двойных кавычках.
  • Массив — [ ]: упорядоченный список значений через запятую. Значения могут быть разных типов.
  • Строка — текст в двойных кавычках: "Москва". Кавычка и обратная косая черта внутри экранируются: \" и \\, перенос строки — \n. Любой символ можно записать кодом: \u041c — это буква М.
  • Число — целое или дробное, с точкой: 42, -3.5, 1.2e6. Без кавычек, без ведущих нулей и без десятичной запятой.
  • Логическое значение — true или false, строчными буквами.
  • Пусто — null.

Объекты и массивы вкладываются друг в друга на любую глубину. Других типов нет: даты передают строкой, обычно в формате ISO 8601 — "2026-11-04T10:30:00+03:00", а деньги — строкой или числом в копейках, чтобы не терять точность.

Правила синтаксиса

JSON строже, чем кажется. Большинство ошибок, на которых падают программы, — нарушение одного из этих правил:

  • Только двойные кавычки — и у ключей, и у строк. 'id' и типографские «ёлочки» или “лапки” — ошибка.
  • Ключи всегда в кавычках: {"id": 1}, а не {id: 1}.
  • Нет запятой после последнего элемента: [1, 2, 3], а не [1, 2, 3,].
  • Нет комментариев — ни //, ни /* */.
  • Нет значений undefined, NaN, Infinity и функций; True и None из Python тоже не подходят.
  • Текст в кодировке UTF-8. Невидимый символ BOM в начале стандарт запрещает добавлять при передаче по сети, а некоторые программы на нём падают.
  • В корне может быть любое значение, но на практике это почти всегда объект или массив.

Если программа пишет «Unexpected token» или «Непредвиденный символ», вставьте текст в «Проверку»: она покажет все ошибки сразу, со строкой и колонкой. Висячие запятые, одинарные кавычки и комментарии убирает «Починка».

Чем JSON отличается от объекта JavaScript

Синтаксис JSON взят из JavaScript, но это не одно и то же. Объект JavaScript — это код: ключи можно писать без кавычек, строки — в одинарных кавычках, можно оставить висячую запятую, комментарий, функцию или undefined. JSON — только данные, и все эти вольности в нём запрещены.

Поэтому объект, скопированный из кода, часто не проходит проверку. В JavaScript текст превращают в объект функцией JSON.parse, а объект в текст — JSON.stringify. В Python то же делают json.loads и json.dumps, в PHP — json_decode и json_encode, в 1С — ПрочитатьJSON и ЗаписатьJSON.

JSON, XML и YAML

  • XML старше и многословнее: каждое значение обёрнуто в открывающий и закрывающий тег, есть атрибуты, схемы и пространства имён. На XML до сих пор работают ЭДО, банковские выписки, обмены 1С и сервисы ФНС.
  • YAML читается легче: структуру задают отступы, кавычки почти не нужны, можно писать комментарии. На нём пишут конфиги — Docker Compose, Kubernetes, CI. Зато одна лишняя табуляция ломает весь файл.
  • JSON — посередине: компактнее XML, строже YAML, и разбирать его умеют почти все языки программирования, большинство — встроенными средствами. Поэтому он стал стандартом для API.

JSON переводится в YAML без потерь, а при обратном переводе пропадают комментарии YAML: это делает инструмент «JSON ↔ YAML».

Где встречается JSON

  • Ответы API: Битрикс24, ЮKassa, Telegram Bot API, маркетплейсы — все отвечают в JSON.
  • Настройки программ: package.json в проектах на JavaScript, settings.json в VS Code, конфиги VPN-клиентов.
  • Выгрузки: заказы и остатки с маркетплейсов, экспорт чатов Telegram, обмены с 1С.
  • Логи: многие сервисы пишут по одному JSON-объекту на строку. Такой формат называют NDJSON или JSON Lines; файл целиком не является JSON, но каждая строка — да.

По сети JSON передают с типом application/json в заголовке Content-Type. Если вместо него пришёл text/html, программа получила веб-страницу — обычно ошибку сервера или страницу входа, — и разбор упадёт на первом символе.

JSON в VPN: конфиги и подписки

VPN-клиенты на ядрах Xray (v2ray) и sing-box — v2rayN, v2rayNG, Hiddify, NekoBox и другие — настраиваются JSON-файлом. В нём описаны входящие и исходящие соединения, протокол (VLESS, VMess, Trojan, Shadowsocks), адрес и порт сервера, ключи и правила маршрутизации: какие сайты пускать через VPN, а какие напрямую.

JSON выбрали потому, что такой конфиг легко собрать программой и передать в ядро, а ядро быстро его разбирает. Подписка обычно приходит списком ссылок вида vless://..., часто закодированным в Base64, а клиент сам превращает их в JSON-конфиг. Некоторые провайдеры сразу отдают готовый JSON.

Фрагмент конфига Xray: сервер VLESS и прямое соединение
{
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "vpn.example.com",
            "port": 443,
            "users": [{ "id": "b831381d-6324-4d53-ad4f-8cda48b30811", "encryption": "none" }]
          }
        ]
      },
      "streamSettings": { "network": "tcp", "security": "reality" }
    },
    { "protocol": "freedom", "tag": "direct" }
  ]
}

Если клиент не принимает конфиг после ручной правки, причина почти всегда в синтаксисе: пропущенная запятая между блоками или кавычки, которые мессенджер заменил на типографские. Проверка найдёт такие места за секунду. WireGuard и OpenVPN, кстати, используют не JSON, а свои текстовые форматы .conf и .ovpn.

JSON-файл: расширение и как открыть

У файла расширение .json, внутри — текст в UTF-8. Маленький файл откроется в Блокноте или TextEdit, но одной строкой его читать неудобно. Удобнее открыть его на нашем сайте кнопкой «Открыть файл» или перетащить в окно: «Дерево» покажет структуру, а «Excel и CSV» превратит массив объектов в таблицу. Файл при этом никуда не загружается — всё считается в браузере. Подробнее — в статье «Чем открыть JSON-файл».

Частые вопросы

JSON что это простыми словами

Способ записать данные текстом так, чтобы их поняла любая программа: объекты с ключами и значениями, списки, строки, числа, true, false и null. Похож на объект JavaScript, но правила строже.

Как расшифровывается JSON

JavaScript Object Notation — «нотация объектов JavaScript». Название историческое: формат давно не зависит от JavaScript, его используют в любых языках.

Можно ли писать комментарии в JSON

Нет, стандарт их запрещает. Некоторые программы, например VS Code в своих настройках, понимают JSON с комментариями, но это расширение формата. Перед передачей в другую программу комментарии лучше убрать — это делает починка.

Чем JSON отличается от JSON Lines и NDJSON

В JSON-файле одно значение, обычно объект или массив. В JSON Lines и NDJSON — много объектов, по одному на строку, без запятых и общих скобок. Такой файл удобно дописывать и читать построчно, поэтому в нём хранят логи.

Какой MIME-тип у JSON

application/json. Его указывают в заголовке Content-Type ответа или запроса. Кодировку отдельно писать не нужно: по RFC 8259 JSON передают в UTF-8.

Почему в JSON русские буквы выглядят как \u0410

Это экранирование: символ записан своим кодом. Так по умолчанию пишут json_encode в PHP и json.dumps в Python. Данные не испорчены, программы прочитают их правильно, а чтобы прочитать глазами, раскодируйте их в инструменте «Кириллица».

Инструменты по теме

Ещё в справке