Как отформатировать и проверить JSON онлайн
Форматтер разбирает JSON стандартным парсером браузера (JSON.parse) и выводит документ с отступом в 2 или 4 пробела либо в минифицированном виде — одной строкой без лишних пробелов. Если документ не разбирается, вместо результата появляется сообщение парсера с описанием ошибки.
Обработка выполняется в браузере: JSON не отправляется на сервер PingDesk. Ответы API нередко содержат токены, email и другие персональные данные, поэтому вставлять их в сервисы, которые обрабатывают данные на своей стороне, рискованно.
Ниже — правила синтаксиса JSON, разбор частых ошибок, разница между JSON, JSON5 и YAML и особенности, которые стоит знать, прежде чем копировать результат обратно в проект.
Как пользоваться форматтером
- 1Вставьте JSON в поле ввода — ответ API, тело вебхука, конфигурацию или строку из лога.
- 2Выберите отступ: 2 или 4 пробела.
- 3Нажмите «Форматировать», чтобы получить читаемый документ с отступами, или «Минифицировать», чтобы убрать все пробелы и переносы. Обе кнопки заодно проверяют синтаксис.
- 4Если появилось сообщение об ошибке, найдите указанное место в документе. Текст ошибки формирует браузер, обычно на английском, например «Expected double-quoted property name in JSON at position 7». Частые причины собраны в таблице ниже.
- 5Скопируйте результат значком копирования в правом верхнем углу поля.
Правила синтаксиса JSON
JSON описан в RFC 8259 и ECMA-404 и намеренно прост. В нём шесть типов значений: объект, массив, строка, число, логическое значение и null. Всё, что выходит за эти правила, — ошибка, даже если такая запись допустима в JavaScript.
- Объект — пары «ключ: значение» в фигурных скобках через запятую. Ключ — всегда строка в двойных кавычках.
- Массив — значения в квадратных скобках через запятую. После последнего элемента запятая не ставится.
- Строки — только в двойных кавычках. Кавычка, обратный слеш и управляющие символы экранируются: \", \\, \n, \t, \uXXXX.
- Числа — десятичные, без ведущих нулей и знака + в начале. Значений NaN и Infinity и шестнадцатеричной записи вида 0xFF в JSON нет.
- Логические значения и пустое значение — только true, false и null в нижнем регистре. undefined в JSON не существует.
- Комментариев в JSON нет. Пробелы, табуляции и переносы между элементами допустимы и не влияют на данные.
Частые ошибки в JSON и как их исправить
Большинство ошибок появляется, когда JSON пишут вручную или копируют из JavaScript-кода, логов и конфигураций в других форматах. Парсер останавливается на первой ошибке: исправив её, запустите проверку снова — следующая может оказаться дальше по документу.
| Ошибка | Неверно | Верно |
|---|---|---|
| Запятая после последнего элемента | {"a": 1, "b": 2,} | {"a": 1, "b": 2} |
| Одинарные кавычки | {'name': 'PingDesk'} | {"name": "PingDesk"} |
| Ключ без кавычек | {name: "PingDesk"} | {"name": "PingDesk"} |
| Комментарий | {"port": 443 // HTTPS} | {"port": 443} |
| Значение из JavaScript | {"value": undefined} | {"value": null} |
| Ведущий ноль в числе | {"code": 007} | {"code": "007"} или {"code": 7} |
| Буквальный перенос строки внутри строки | "первая<перенос>вторая" | "первая\nвторая" |
| Незакрытая скобка | {"items": [1, 2, 3} | {"items": [1, 2, 3]} |
Форматирование и минификация: когда что нужно
Форматирование (pretty print) расставляет переносы и отступы, чтобы структуру было видно глазами. Это удобно для отладки, код-ревью и хранения конфигураций в Git: изменения в диффе становятся построчными.
Минификация убирает все незначащие пробелы и переносы. Так JSON занимает меньше места в логах, переменных окружения и теле запроса, а одна запись умещается в одну строку лога. Экономия заметна на больших документах с глубокой вложенностью, но если сервер сжимает ответы gzip или Brotli, разница после сжатия становится небольшой.
Что меняется в данных при форматировании
Форматтер не просто переставляет пробелы: он разбирает документ в объект JavaScript и сериализует его заново. Для корректного JSON это безопасно, но есть особенности, о которых стоит знать, прежде чем вставлять результат обратно в проект.
- Дублирующиеся ключи. Если ключ встречается в объекте дважды, останется только последнее значение — без предупреждения. Стандарт требует уникальности ключей лишь как рекомендации, и разные парсеры обрабатывают дубли по-разному.
- Большие целые числа. Числа больше 2^53 − 1 (9 007 199 254 740 991) теряют точность: 12345678901234567890 превратится в 12345678901234567000. Это типичная проблема 64-битных идентификаторов из баз данных — их безопаснее передавать строками.
- Запись чисел нормализуется: 1.0 станет 1, а 1e3 — 1000.
- Порядок ключей. Ключи, похожие на неотрицательные целые числа ("1", "2", "10"), выводятся первыми по возрастанию, остальные — в исходном порядке.
- Escape-последовательности раскрываются: \u0416 станет буквой Ж, а \/ — обычным слешем. Данные при этом остаются теми же.
JSON, JSON5 и YAML: в чём разница
JSON строг ради совместимости: любой парсер на любом языке прочитает его одинаково. Для конфигураций, которые пишут люди, появились более мягкие форматы. Файлы вроде tsconfig.json и настроек VS Code — это JSONC, JSON с комментариями. YAML 1.2 почти полностью совместим с JSON: валидный JSON, как правило, является и валидным YAML.
Этот инструмент проверяет только строгий JSON: документ JSON5 или JSONC с комментариями и запятыми в конце он отметит как ошибочный.
| Возможность | JSON | JSON5 | YAML |
|---|---|---|---|
| Комментарии | Нет | // и /* */ | # |
| Запятая после последнего элемента | Нет | Да | Не нужна в блочном синтаксисе |
| Ключи без кавычек | Нет | Да, если ключ — идентификатор | Да |
| Одинарные кавычки | Нет | Да | Да |
| Многострочные строки | Только через \n | Через \ в конце строки | Блоки | и > |
| Типичное применение | API, обмен данными, package.json | Конфигурации, которые правят вручную | Docker Compose, Kubernetes, CI |
Как проверять JSON-ответы API
Когда API возвращает ошибку или неожиданные данные, первым делом посмотрите на сырой ответ. Получите его через curl -s https://api.example.ru/v1/status или вкладку Network в DevTools, вставьте сюда и отформатируйте — вложенная структура сразу станет читаемой.
- Проверьте заголовок Content-Type: для JSON это application/json. Если сервер отдаёт text/html, вместо данных вы, скорее всего, получили страницу ошибки прокси или WAF.
- Ошибка на первом символе с упоминанием токена < означает, что ответ — HTML-страница, а не JSON.
- Сверьте типы: "42" и 42, "true" и true, null и отсутствующее поле — разные вещи для клиентского кода.
- Разовая проверка показывает ответ только в моменте. Чтобы узнать, что поле исчезло или изменило значение после деплоя, нужна автоматическая проверка по расписанию.
Частые вопросы
Как проверить JSON на ошибки онлайн?
+
Вставьте документ в поле и нажмите «Форматировать» или «Минифицировать» — обе операции сначала разбирают JSON. Если синтаксис корректен, появится результат, если нет — сообщение браузера с описанием ошибки. Данные при этом не покидают ваш браузер.
Почему JSON не проходит валидацию?
+
Самые частые причины — запятая после последнего элемента, одинарные кавычки, ключи без кавычек, комментарии, незакрытая скобка или значения из JavaScript вроде undefined и NaN. Ещё одна частая ситуация — вместо JSON сервер вернул HTML-страницу ошибки.
Чем JSON отличается от объекта JavaScript?
+
JSON — текстовый формат со строгими правилами: ключи и строки только в двойных кавычках, без запятой в конце и без комментариев. В нём нет функций, undefined, дат и произвольных выражений. Объект JavaScript превращают в JSON функцией JSON.stringify, а обратно — JSON.parse.
Зачем минифицировать JSON?
+
Минификация удаляет пробелы и переносы, уменьшая размер документа и позволяя записать его в одну строку — для логов, переменных окружения и тела запроса. Для чтения и отладки удобнее форматированный вариант с отступами.
Можно ли писать комментарии в JSON?
+
В стандартном JSON — нет, и парсер выдаст ошибку. Если комментарии нужны в конфигурации, используйте JSONC (так устроены tsconfig.json и настройки VS Code), JSON5 или YAML, но учитывайте, что строгий парсер такие файлы не примет.
Почему после форматирования изменилось большое число?
+
JavaScript хранит числа в формате с плавающей точкой, и целые больше 9 007 199 254 740 991 (2^53 − 1) теряют точность. Поэтому 12345678901234567890 после форматирования станет 12345678901234567000. Длинные идентификаторы в API безопаснее передавать строками.
Как отформатировать JSON в командной строке?
+
Удобнее всего утилита jq: curl -s URL | jq . выведет ответ с отступами. Без установки дополнительных программ подойдёт python3 -m json.tool file.json. В PowerShell — Get-Content file.json -Raw | ConvertFrom-Json | ConvertTo-Json -Depth 10.
Что означает ошибка Unexpected token в JSON?
+
Парсер встретил символ, которого не ожидал в этом месте: одинарную кавычку, букву вместо значения, лишнюю запятую или начало HTML-страницы. Найдите указанную позицию и проверьте символы перед ней. Если ошибка на первом символе и токен — <, сервер вернул HTML вместо JSON.