Техподдержка

Частые ошибки JSON: запятая в конце, кавычки и Unexpected token

Исправьте невалидный JSON: конечная запятая, одинарные кавычки, ключи без кавычек и Unexpected token. Почему падает JSON.parse.

Короткий ответ

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

JSON похож на объект JavaScript, но строже. Имена свойств и строки нуждаются в двойных кавычках.

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

JSON помечен как невалидный. Обычно это мелочь синтаксиса, а не сломанный формат. Семь ошибок ниже дают большую часть Unexpected token.

Почему JSON так легко ломается?

JSON — формат данных со строгим синтаксисом. Литерал объекта JavaScript может выглядеть похоже и всё равно быть невалидным JSON. В стандартном JSON имена и строки в двойных кавычках, конечные запятые запрещены, комментарии в формат не входят.

1. Конечные запятые (trailing commas)

Лишняя запятая после последнего свойства — проблема. Стандартный JSON её не допускает.

Неверно

{
  "name": "Alex",
  "age": 30,
}

Верно

{
  "name": "Alex",
  "age": 30
}

То же правило для массивов. Уберите запятую после последнего элемента.

Неверно

[
  "red",
  "green",
]

Верно

[
  "red",
  "green"
]

2. Одинарные кавычки вместо двойных

JavaScript часто принимает одинарные кавычки. JSON — нет. Имена свойств и строковые значения должны быть в двойных кавычках.

Неверно

{
  'name': 'Alex'
}

Верно

{
  "name": "Alex"
}

3. Имена свойств без кавычек

В JavaScript иногда можно написать name без кавычек. В JSON каждое имя свойства должно быть строкой в двойных кавычках.

Неверно

{
  name: "Alex",
  age: 30
}

Верно

{
  "name": "Alex",
  "age": 30
}

4. Пропущенные запятые между значениями

Между свойствами и элементами массива нужна запятая. Парсер может сообщить Unexpected token на следующей кавычке или скобке, а не на пропущенной запятой.

Неверно

{
  "name": "Alex"
  "age": 30
}

Верно

{
  "name": "Alex",
  "age": 30
}

5. Лишние или недостающие скобки

Объекты используют { }. Массивы — [ ]. Вложенный JSON падает, когда нет ], лишняя } или они перепутаны. Считайте пары открытия и закрытия.

Неверно

{
  "items": [1, 2
}

Верно

{
  "items": [1, 2]
}

6. Неверные последовательности экранирования

В строке JSON обратный слэш начинает экранирование. Последовательности ", \ и \n допустимы. Путь Windows вида C:\Users — нет: \U не является законным JSON-экранированием. Удвойте слэши, иначе парсер остановится на этом символе.

Неверно

{"file":"C:\Users\Alex"}

Верно

{"file":"C:\\Users\\Alex"}

7. Комментарии внутри JSON

В стандартном JSON комментариев нет. Некоторые инструменты конфигурации принимают // или /* */ (JSONC, JSON5 и похожие). Это не стандартный JSON, и JSON.parse его отвергнет.

Неверно

{
  // user name
  "name": "Alex"
}

Что значит «Unexpected token»?

Парсер встретил недопустимый символ в этой позиции. Указанная точка — где чтение остановилось. Если раньше пропущена запятая, ошибка может указать на кавычку следующего свойства. Формулировка зависит от среды; не ждите одну и ту же фразу в каждом браузере.

Что значит «Unexpected end of JSON input»?

Текст закончился до завершения значения. Типичные причины: нет } или ], обрезанный ввод, пустое тело или оборванный ответ API. Это не одна единственная ошибка.

Почему падает JSON.parse()?

JSON.parse() принимает только валидный текст JSON. Это срабатывает:

const text = '{"name":"Alex"}';
const data = JSON.parse(text);

Это падает, потому что одинарные кавычки — не JSON:

const text = "{'name':'Alex'}";
JSON.parse(text);

Точный текст ошибки зависит от среды JavaScript. Считайте его подсказкой и проверьте запятые, кавычки и скобки рядом с этой позицией.

JSON — это не объект JavaScript

Литерал объекта JavaScript может выглядеть как { name: 'Alex' }. Валидный JSON должен выглядеть как { "name": "Alex" }: имена и строки в двойных кавычках, без конечной запятой и без комментариев.

  • Текст JSON
  • Парсер читает токены
  • Валидные данные или Unexpected token
Метка ошибки — где разбор остановился; это может быть после настоящей ошибки.

Как быстро найти ошибку JSON

Идите в этом порядке. Не начинайте с переписывания всего файла.

  1. Прогоните JSON через валидатор.
  2. Прочитайте первую сообщённую ошибку.
  3. Посмотрите чуть раньше указанной позиции.
  4. Проверьте запятые, особенно конечные и пропущенные.
  5. Проверьте кавычки: только двойные.
  6. Сопоставьте { } и [ ].
  7. Проверьте экранирование обратным слэшем в строках.
  8. Уберите комментарии, если нужен строгий JSON.

Краткая карта обычных исправлений:

Проблема Исправление
Конечная запятаяУдалите запятую после последнего элемента.
Одинарные кавычкиИспользуйте двойные кавычки для имён и строк.
Ключ без кавычекОберните имя свойства в двойные кавычки.
Пропущенная запятаяПоставьте запятую между свойствами или элементами.
Пропущенная скобкаЗакройте каждую пару { } и [ ].
Неверное экранированиеИспользуйте допустимое экранирование или удвойте слэши в путях.
КомментарийУберите // и /* */ для стандартного JSON.

Проверить и отформатировать JSON в браузере

NEXNARA Форматирование и сравнение JSON может проверить JSON на этом устройстве.

Можно проверять, форматировать с 2 пробелами, 4 пробелами или табами, сжимать, сравнивать два документа (JSON Diff) и открывать файл .json. Разбор использует JSON.parse в браузере, не eval.

Документы больше 5 МБ могут тормозить. Текст больше 15 МБ в браузере не обрабатывается, чтобы страница оставалась отзывчивой.

Обработка JSON выполняется в браузере. Этот инструмент не отправляет текст на сервер NEXNARA. Реклама и другие функции сайта по‑прежнему используют сеть; это отдельно от обработки.

Нужно проверить невалидный JSON? Откройте Форматирование и сравнение JSON и вставьте текст.

FAQ

Почему мой JSON говорит «Unexpected token»?

Парсер встретил недопустимый символ в этом месте. Настоящая ошибка — часто пропущенная запятая или одинарная кавычка — может быть сразу перед этим.

Разрешены ли конечные запятые в JSON?

Нет. Стандартный JSON не допускает запятую после последнего свойства или элемента массива. Литералы объектов JavaScript часто допускают.

Может ли JSON использовать одинарные кавычки?

Нет. Имена свойств и строки должны использовать двойные кавычки.

Может ли JSON содержать комментарии?

Не в стандартном JSON. Некоторые инструменты принимают JSONC или JSON5 с комментариями; JSON.parse всё равно их отвергнет.

Почему падает JSON.parse()?

Строка не является валидным JSON. Типичные причины: конечные запятые, одинарные кавычки, ключи без кавычек, комментарии или обрезанное значение. Точный текст зависит от среды.

Как проверить, валиден ли JSON?

Вставьте его в валидатор вроде Форматирование и сравнение JSON или вызовите JSON.parse в консоли. Если разбор бросает исключение, текст не является валидным JSON.