Данные · 3 мин чтения ·

Невалидный JSON? 7 ошибок, из-за которых он ломается

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

«Unexpected token» и «Unexpected end of JSON input» — одни из самых частых ошибок, которые видят разработчики. JSON — строгий формат, гораздо строже JavaScript, из которого он вырос, и почти любой сбой сводится к одной из нескольких типичных ошибок.

1. Запятая в конце

Запятая после последнего элемента объекта или массива — ошибка номер один. JavaScript её принимает, стандарт JSON — нет.

{"name": "Ana", "age": 31,}   ✗
{"name": "Ana", "age": 31}    ✓

2. Одинарные кавычки и 3. ключи без кавычек

Каждый ключ и каждая строка должны быть в двойных кавычках. {name: 'Ana'} — корректный JavaScript, но невалидный JSON; нужно писать {"name": "Ana"}.

4. Комментарии

В JSON нет комментариев. // и /* */ — это ошибка, что удивляет всех, кто копирует из конфигурационного файла в формате JSON5 или JSONC, например из настроек VS Code.

5. Особые значения и 6. неэкранированные символы

undefined, NaN, Infinity и функций в JSON нет; используйте null или число. Внутри строки двойная кавычка записывается как \", обратная косая черта — как \\, а перевод строки — как \n. Пути Windows — классическая ловушка: в "C:\new" содержится перевод строки, а не обратная косая черта и буква n.

7. Не хватает скобок или есть лишние

Пропущенная закрывающая } или ] обычно проявляется как ошибка в самом конце текста, далеко от настоящей проблемы. Если отформатировать JSON с отступами, сразу видно, какой уровень сломан.

Ошибки, которые трудно увидеть

Некоторый невалидный JSON на экране выглядит безупречно:

  • Типографские кавычки. Текст из текстового редактора, мессенджера или презентации часто содержит “ и ” вместо прямых двойных кавычек. Они выглядят почти так же, но JSON принимает только прямой символ ".
  • Метка порядка байтов (BOM). Некоторые редакторы в Windows сохраняют файлы с невидимым символом в начале. JSON.parse в JavaScript и json.loads в Python его отвергают, а ошибка указывает на позицию 0.
  • Неразрывные пробелы и другие невидимые символы, вставленные с веб-страниц.

Валидный JSON, который всё равно вызывает баги

json.dumps в Python по умолчанию пишет NaN и Infinity, а другие парсеры их не принимают; передайте allow_nan=False, чтобы поймать это заранее. Очень большие целые числа, например 64-битные идентификаторы из базы данных, — валидный JSON, но в JavaScript они теряют точность после 9007199254740991, поэтому многие API передают их строками. Большинство парсеров допускает повторяющиеся ключи, но молча побеждает последнее значение.

Как читать сообщение об ошибке

Парсер сообщает, где он сдался, а не где вы ошиблись. Пропущенную запятую обычно указывают в начале следующего ключа, а пропущенную закрывающую скобку — в самом конце ввода. Смотрите чуть раньше указанной позиции.

{
  "name": "Ana"
  "age": 31        ← ошибка указана здесь (строка 3)
}                   пропущенная запятая — в конце строки 2

Найти точное место

Валидатор JSON от 4Dev проверяет текст по стандарту JSON (RFC 8259) и показывает строку и столбец первой ошибки, а также предлагает исправление. Он проверяет синтаксис, а не смысл: валидный JSON всё равно может содержать неверный тип или пропущенное поле для вашего приложения.

Открыть валидатор JSON

LinkedInXFacebook