Техподдержка
Частые ошибки 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. Считайте его подсказкой и проверьте запятые, кавычки и скобки рядом с этой позицией.
Литерал объекта JavaScript может выглядеть как { name: 'Alex' }. Валидный JSON должен выглядеть как { "name": "Alex" }: имена и строки в двойных кавычках, без конечной запятой и без комментариев.
- Текст JSON
- Парсер читает токены
- Валидные данные или Unexpected token
Как быстро найти ошибку JSON
Идите в этом порядке. Не начинайте с переписывания всего файла.
- Прогоните JSON через валидатор.
- Прочитайте первую сообщённую ошибку.
- Посмотрите чуть раньше указанной позиции.
- Проверьте запятые, особенно конечные и пропущенные.
- Проверьте кавычки: только двойные.
- Сопоставьте { } и [ ].
- Проверьте экранирование обратным слэшем в строках.
- Уберите комментарии, если нужен строгий 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.