Как исправить синтаксические ошибки JSON: 7 самых частых ошибок и приведение JSON в порядок
Ответы API, конфигурационные файлы, логи — JSON остаётся форматом данных, который разработчики читают чаще всего. И всё же одна запятая или кавычка может вызвать ошибку «Unexpected token». Вот как быстро найти причину.
Основные правила
JSON (JavaScript Object Notation) — текстовый формат, стандартизированный в RFC 8259 и ECMA-404. Он появился в JavaScript, но сейчас поддерживается почти всеми языками. Типов значений всего шесть: строка, число, логическое значение (true/false), null, массив и объект.
Объекты перечисляют пары "ключ": значение в фигурных скобках, массивы — значения в квадратных скобках, всё через запятую. Ключи должны быть строками в двойных кавычках. Правила простые, а потому строгие: запись, допустимая в коде JavaScript, в JSON может оказаться ошибкой.
{
"id": 1024,
"name": "AIBIZAP",
"active": true,
"tags": ["tools", "guides"],
"owner": null
}
Семь ошибок, из-за которых не удаётся разбор
Посмотрите чуть раньше позиции, указанной в сообщении об ошибке: почти всегда причина — одна из перечисленных. Если вставить документ в форматировщик JSON, он расставит отступы, и проблемную строку будет легко найти.
- Висячие запятые: [1, 2, 3,] — недопустимо.
- Одинарные кавычки: используйте "name", а не 'name'.
- Ключи без кавычек: {name: "a"} — это объект JavaScript, а не JSON.
- Комментарии: в стандартном JSON нет комментариев // и /* */.
- Пропущенное экранирование: внутри строк пишите \" для кавычек, \\ для обратной косой черты и \n для перевода строки. Неэкранированный путь Windows вроде C:\Users ломает документ.
- Специальные значения: NaN, Infinity и undefined в JSON не существуют. Для отсутствующих значений используйте null.
- BOM и невидимые символы: метка BOM UTF-8 в начале файла или неразрывный пробел, попавший при копировании, могут вызвать ошибку уже на первом символе.
Осторожно с большими числами и дробями
Стандарт JSON не ограничивает размер чисел, но JavaScript хранит любое число как 64-битное число с плавающей точкой. Целые числа больше 2^53 (9 007 199 254 740 992) нельзя представить точно, поэтому у длинных ID, переданных числом, в браузере могут измениться последние цифры.
Передавайте такие значения строками с самого начала, например "id": "1234567890123456789". С деньгами похожая проблема — в арифметике с плавающей точкой 0,1 + 0,2 даёт 0,30000000000000004, — поэтому суммы часто передают целым числом копеек или строкой.
В JSON нет типа даты
Даты обычно передают либо строками ISO 8601 ("2026-10-28T09:00:00Z"), либо метками времени Unix (1793178000). Рекомендуется ISO 8601 с Z в конце (UTC) или явным смещением, например +03:00: так дата читаема и однозначна.
Значение без часового пояса, например "2026-10-28 09:00", заставляет получателя гадать, серверное это время или пользовательское, что приводит к ошибкам вроде сдвига на несколько часов.
Форматирование и минификация
Отступы и переводы строк делают JSON удобнее для чтения; удаление всех пробелов уменьшает объём передачи. Смысл одинаков, поэтому при отладке форматируйте, а для передачи и хранения — минифицируйте.
JSON, который редактируют люди, например конфигурационные файлы, храните в системе контроля версий в отформатированном виде, чтобы изменения было легко проверять. Порядок ключей значения не имеет, но отсортированные ключи делают сравнение версий гораздо нагляднее.
Как превратить JSON в код и таблицы
По образцу ответа API часто нужны соответствующие классы на C#, Java, Python или TypeScript. Переписывать десятки полей вручную — путь к опечаткам; генератор классов из JSON выводит типы по образцу и пишет код модели за вас.
Чтобы сохранить те же данные в базе, генератор DDL из JSON подготовит черновик оператора CREATE TABLE. Выведенные типы основаны только на значениях вашего образца, поэтому перед окончательным вариантом проверьте поля, допускающие null, длину строк и первичные ключи.