Данные

Как исправить синтаксические ошибки 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, длину строк и первичные ключи.

Попробуйте с этими инструментами

Другие руководства

Все руководства