Распространенные ошибки в JSON и как их исправить

Распространенные ошибки в JSON и как их исправить

Пошаговое руководство по поиску и устранению синтаксических сбоев, из-за которых ломается парсинг данных.

JSON (JavaScript Object Notation) — самый популярный формат обмена данными в веб-разработке. Он легкий, понятный и поддерживается любым языком программирования. Однако у JSON невероятно строгий синтаксис. Стоит пропустить одну запятую или поставить не те кавычки — и ваше приложение упадет с ошибкой SyntaxError: Unexpected token или JSON_ERROR_SYNTAX.

Если вы регулярно сталкиваетесь со сбоями при парсинге ответов от API или конфигурационных файлов, эта статья для вас. Ниже собраны самые частые ошибки разработчиков и готовые рецепты их исправления.

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

Это абсолютно лидирующая ошибка, особенно среди JavaScript- и Python-разработчиков, которые привыкли использовать одинарные (') и двойные (") кавычки взаимозаменяемо.

  • В чем ошибка: Спецификация JSON требует использования исключительно двойных кавычек для всех строк и имен свойств (ключей). Одинарные кавычки невалидны.
  • Пример:
// ❌ НЕПРАВИЛЬНО { 'name': 'Алексей', "age": 25 }

Как исправить: Замените все одинарные кавычки вокруг ключей и текстовых значений на двойные.

// ПРАВИЛЬНО { "name": "Алексей", "age": 25 }

2. Висячие запятые (Trailing Commas)

В современном JavaScript, PHP и многих других языках оставлять запятую после последнего элемента в массиве или объекте считается хорошим тоном — это делает git-диффы чистыми. Но в JSON это фатальная ошибка.

2. Висячие запятые (Trailing Commas)

// ❌ НЕПРАВИЛЬНО { "skills": ["JavaScript", "TypeScript", "Node.js",], "isActive": true, }

Как исправить: Удалите запятую у самого последнего элемента в каждом объекте и массиве.

// ПРАВИЛЬНО { "skills": ["JavaScript", "TypeScript", "Node.js"], "isActive": true }

3. Ключи без кавычек

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

  • В чем ошибка: Написание имен свойств как обычных переменных без кавычек.
  • Пример:
// ❌ НЕПРАВИЛЬНО { userId: "usr_42", isAdmin: false }

Как исправить: Оберните все ключи в двойные кавычки.

// ПРАВИЛЬНО { "userId": "usr_42", "isAdmin": false }

4. Неэкранированные кавычки и переносы строк

Если внутри текстового значения содержится прямая речь с кавычками или текст физически разбит на несколько строк, это сломает синтаксис.

  • В чем ошибка: Использование явных символов переноса строки (нажатие Enter в редакторе) или внутренних двойных кавычек без обратного слэша.
  • Пример:
// ❌ НЕПРАВИЛЬНО { "comment": "Он сказал: "Привет" и ушел.", "bio": "Строка один Строка два" }

Как исправить: Экранируйте внутренние кавычки с помощью \", а вместо физического переноса строки используйте управляющий символ \n.

// ПРАВИЛЬНО { "comment": "Он сказал: \"Привет\" и ушел.", "bio": "Строка один\nСтрока два" }

5. Запрещенные типы данных (undefined, NaN, функции)

JSON поддерживает ограниченный набор типов: строки, числа, объекты, массивы, логические значения (true/false) и null. Специфические для JS значения использовать нельзя.

  • В чем ошибка: Попытка передать undefined, NaN, Infinity или исполняемый код (функции) в структуру данных.
  • Пример:
// ❌ НЕПРАВИЛЬНО { "timeout": undefined, "balance": NaN, "handler": function() { return null; } }

Как исправить: Замените неподдерживаемые значения на null, валидные числа или строки, либо полностью удалите эти свойства.

// ПРАВИЛЬНО { "timeout": null, "balance": 0 }

6. Нарушение парности скобок

При ручном редактировании тяжелых, глубоко вложенных JSON-файлов легко потерять или случайно удалить одну из закрывающих фигурных } или квадратных ] скобок.

  • В чем ошибка: Асимметрия структуры, из-за которой парсер выдает ошибку вроде Unexpected end of JSON input.
  • Пример:
// ❌ НЕПРАВИЛЬНО { "data": { "items": [1, 2, 3 } } // Пропущена закрывающая квадратная скобка для "items"

Как исправить: Используйте плагины для подсветки парных скобок в вашей IDE или проверяйте структуру в специальных утилитах.

// ПРАВИЛЬНО { "data": { "items": [1, 2, 3] } }

Как быстро находить и автоматизировать исправление ошибок 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, чтобы некорректный ответ сервера не привел к падению всего вашего фронтенда или бэкенда.

try { const cleanData = JSON.parse(apiResponseContent); // продолжаем безопасную работу с объектом } catch (error) { console.error("Не удалось распарсить JSON:", error.message); // обрабатываем ошибку локально, например, подгружая дефолтные настройки }

Заключение

Жесткие правила JSON — это не прихоть создателей формата, а гарантия того, что системы на совершенно разных языках программирования смогут безошибочно передавать данные друг другу. Достаточно один раз запомнить правила про двойные кавычки и запрет висячих запятых, а также держать под рукой валидатор вроде jstools.space — и время на отладку JSON-структур сократится до нуля.