Распространенные ошибки в JSON и как их исправить
Пошаговое руководство по поиску и устранению синтаксических сбоев, из-за которых ломается парсинг данных.
JSON (JavaScript Object Notation) — самый популярный формат обмена данными в веб-разработке. Он легкий, понятный и поддерживается любым языком программирования. Однако у JSON невероятно строгий синтаксис. Стоит пропустить одну запятую или поставить не те кавычки — и ваше приложение упадет с ошибкой SyntaxError: Unexpected token или JSON_ERROR_SYNTAX.
Если вы регулярно сталкиваетесь со сбоями при парсинге ответов от API или конфигурационных файлов, эта статья для вас. Ниже собраны самые частые ошибки разработчиков и готовые рецепты их исправления.
1. Одинарные кавычки вместо двойных
Это абсолютно лидирующая ошибка, особенно среди JavaScript- и Python-разработчиков, которые привыкли использовать одинарные (') и двойные (") кавычки взаимозаменяемо.
- В чем ошибка: Спецификация JSON требует использования исключительно двойных кавычек для всех строк и имен свойств (ключей). Одинарные кавычки невалидны.
- Пример:
Как исправить: Замените все одинарные кавычки вокруг ключей и текстовых значений на двойные.
2. Висячие запятые (Trailing Commas)
В современном JavaScript, PHP и многих других языках оставлять запятую после последнего элемента в массиве или объекте считается хорошим тоном — это делает git-диффы чистыми. Но в JSON это фатальная ошибка.
2. Висячие запятые (Trailing Commas)
Как исправить: Удалите запятую у самого последнего элемента в каждом объекте и массиве.
3. Ключи без кавычек
В обычных объектах JavaScript кавычки вокруг ключей можно опускать, если они не содержат дефисов или спецсимволов. В JSON каждый первый ключ обязан быть строкой в двойных кавычках.
- В чем ошибка: Написание имен свойств как обычных переменных без кавычек.
- Пример:
Как исправить: Оберните все ключи в двойные кавычки.
4. Неэкранированные кавычки и переносы строк
Если внутри текстового значения содержится прямая речь с кавычками или текст физически разбит на несколько строк, это сломает синтаксис.
- В чем ошибка: Использование явных символов переноса строки (нажатие Enter в редакторе) или внутренних двойных кавычек без обратного слэша.
- Пример:
Как исправить: Экранируйте внутренние кавычки с помощью \", а вместо физического переноса строки используйте управляющий символ \n.
5. Запрещенные типы данных (undefined, NaN, функции)
JSON поддерживает ограниченный набор типов: строки, числа, объекты, массивы, логические значения (true/false) и null. Специфические для JS значения использовать нельзя.
- В чем ошибка: Попытка передать undefined, NaN, Infinity или исполняемый код (функции) в структуру данных.
- Пример:
Как исправить: Замените неподдерживаемые значения на null, валидные числа или строки, либо полностью удалите эти свойства.
6. Нарушение парности скобок
При ручном редактировании тяжелых, глубоко вложенных JSON-файлов легко потерять или случайно удалить одну из закрывающих фигурных } или квадратных ] скобок.
- В чем ошибка: Асимметрия структуры, из-за которой парсер выдает ошибку вроде Unexpected end of JSON input.
- Пример:
Как исправить: Используйте плагины для подсветки парных скобок в вашей IDE или проверяйте структуру в специальных утилитах.
Как быстро находить и автоматизировать исправление ошибок JSON
Искать опечатки вручную в файле на 500 строк — неблагодарное занятие. Чтобы полностью защитить себя от синтаксических ошибок, используйте проверенный стек инструментов:
1. Онлайн-валидаторы общего назначения
Когда нужно быстро проверить конфиг, лог вебхука или тело запроса, вставьте текст в JSON Formatter & Validator. Вместо невнятного сообщения об ошибке инструмент мгновенно отформатирует «кашу» из текста в красивое дерево, подсветит место сбоя красным маркером и укажет точный номер строки и символ, где вы забыли кавычку или оставили лишнюю запятую.
2. Настройка автоматики в IDE
Если вы работаете в VS Code или Cursor, убедитесь, что расширение Prettier активировано для файлов с расширением .json. Оно автоматически уберет висячие запятые, исправит одинарные кавычки на двойные и выровняет отступы при каждом сохранении файла (Ctrl + S / Cmd + S).
3. Безопасный парсинг в коде (Try...Catch)
При динамической обработке данных от внешних REST API никогда не вызывайте JSON.parse() напрямую в основном потоке выполнения. Всегда оборачивайте его в блок try...catch, чтобы некорректный ответ сервера не привел к падению всего вашего фронтенда или бэкенда.
Заключение
Жесткие правила JSON — это не прихоть создателей формата, а гарантия того, что системы на совершенно разных языках программирования смогут безошибочно передавать данные друг другу. Достаточно один раз запомнить правила про двойные кавычки и запрет висячих запятых, а также держать под рукой валидатор вроде jstools.space — и время на отладку JSON-структур сократится до нуля.