Как проверить JSON и найти ошибку синтаксиса
Отличить byte position от номера символа и исправить trailing comma
Если интеграция не принимает документ, сначала проверьте, можно ли вообще разобрать его как JSON. Ошибка синтаксиса мешает добраться до содержимого. Отсутствующее поле или неподходящий тип относятся уже к следующей проверке: документ может быть правильно записан и при этом не соответствовать договорённости вашего API.
Проверка JSON в Neraviko проверяет исходный текст и возвращает признак успешного разбора либо описание ошибки. Она не ищет сведения о пользователе, не проверяет товар в базе и не восстанавливает пропущенные данные. Ниже используются только синтетические примеры, которые можно вставить в поле инструмента.
Минимальный пример ошибки
Исходный документ:
{"ready":true,}
Запятая сообщает, что дальше должен идти ещё один член объекта, но вместо него стоит закрывающая скобка. Текущий парсер Neraviko возвращает ошибку с такими полями; это фрагмент описания ошибки, а не полный API-ответ:
{
"code": "INVALID_JSON",
"message": "Trailing commas are not valid JSON.",
"path": "/input",
"severity": "error",
"position": 14
}
Исправленный ввод:
{"ready":true}
Полезная часть успешного результата операции:
{"valid":true}
Оба случая проверены на текущем исходном парсере. Значение position — байтовое смещение с нуля. В длинном сообщении ищите проблемную область по позиции, но смотрите и немного раньше: незакрытая строка может заставить парсер остановиться далеко от пропущенной кавычки.
Порядок диагностики
- Сохраните первоначальный документ без правок. Так можно вернуться к тому, что реально отправила система.
- Выделите только JSON. Строка статуса HTTP, логи до открывающей скобки и Markdown-оформление не входят в документ.
- Отправьте обезличенный пример в JSON validator.
- Исправьте первую указанную ошибку и повторите проверку. Пока разбор остановился на первой проблеме, остальные могут быть ещё не видны.
- После успеха проверьте содержимое и нужные поля; при наличии схемы выполните проверку по JSON Schema.
Не превращайте исправление в массовую замену символов. Удаление всех обратных косых черт разрушит строки с путями и экранированными кавычками. Замена всех одиночных кавычек тоже может повредить текстовое значение. Вносите правку только в понятное место и выясняйте, откуда она появилась.
Типовые места, где ломается запись
| Ввод | Что проверить | Синтетический исправленный вариант |
|---|---|---|
{'ready':true} |
Кавычки имени ключа | {"ready":true} |
{"ready":True} |
Регистр литерала | {"ready":true} |
{"count":02} |
Ведущий ноль числа | {"count":2} |
{"price":NaN} |
Значение вне JSON | Выбрать допустимое значение по контракту |
{"a":1}{"b":2} |
Два документа вместо одного | [{"a":1},{"b":2}], если получатель ожидает массив |
Последний вариант не является универсальным ремонтом: массив меняет структуру сообщения. Иногда источник отдаёт поток отдельных JSON-документов, и его нужно читать подходящим способом, а не склеивать в одно поле. Для NaN также нет безусловной замены: число, null и отсутствие ключа означают разные вещи.
JSON не допускает комментарии и завершающие запятые. Литералы true, false, null записываются строчными буквами; числа не содержат NaN или Infinity. Эти ограничения следуют из грамматики формата. RFC 8259, разделы 2–6.
Успешный синтаксис и качество данных
Этот синтетический документ успешно разбирается:
{"ready":true,"count":2,"tags":["demo"]}
Однако синтаксический валидатор не знает, допустима ли метка demo в вашем приложении. Он также не утверждает, что имена ключей уникальны. Ввод {"amount":1,"amount":2} проходит текущую синтаксическую проверку Neraviko, поэтому повторяющиеся ключи необходимо проверять отдельно. В режиме JSON Schema Neraviko отклоняет их до проверки схемы.
Для удобного просмотра вложенности после успешной проверки используйте форматирование JSON. Если исходное сообщение должно сохранять байтовую идентичность для подписи или контрольной суммы, анализируйте копию. Успех разбора не означает, что преобразованная копия подходит для отправки получателю.
Как обращаться с реальными документами
Проверка Neraviko выполняется на сервере: содержимое поля передаётся HTTP-запросом. Удалите токены, пароли и персональные значения до загрузки либо примените локальный парсер в своей доверенной среде. Встроенная операция не сохраняет разобранную копию результата; это не основание утверждать, что данные вообще не покидали устройство.
Лимит операции — 262 144 байта запроса с дополнительным общим ограничением payload. Сбой сети, ограничение размера и синтаксическая ошибка — разные причины неудачи. Если сервис сообщает транспортную ошибку, повторный запуск после исправления JSON может ничего не изменить: сначала уточните статус запроса и размер документа.