Главная › Блог › Ошибки синтаксиса JSON
Инструменты разработчика

Распространенные ошибки синтаксиса JSON: Руководство по стандарту RFC 8259

Опубликовано: 9 октября 2026 г. • Обновлено: 11 октября 2026 г. • 4 мин чтения • Протестировано в форматировщике JSON GoToolstack
Попробуйте инструмент в действии: Форматируйте, проверяйте и сжимайте синтаксис JSON с сохранением 64-битных чисел без потерь прямо в браузере.
Открыть форматировщик JSON

1. Валидация синтаксиса, JSON Schema и бизнес-правила: принципиальные различия

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

  • Валидация синтаксиса RFC 8259: Проверяет строгое соответствие лексической грамматике формата JSON: парность фигурных и квадратных скобок, обязательные двойные кавычки для ключей и строк, запятые в качестве разделителей и корректные примитивные литералы (строки, числа, булевы значения, null). Если пропущена хоть одна кавычка или скобка, текст не является валидным JSON.
  • Валидация по JSON Schema: Оценивает, соответствует ли синтаксически корректный документ заранее заданному контракту данных (директивы $schema, ожидаемые типы свойств, обязательные поля, границы массивов). Документ может быть на 100% корректен синтаксически, но нарушать схему.
  • Валидация бизнес-правил: Проверяет предметную логику конкретного приложения (например, баланс счета не может быть отрицательным или дата окончания должна быть позже даты начала). Ни синтаксические парсеры, ни общие схемы не проверяют инварианты предметной области.

Инструмент GoToolstack выполняет исключительно строгую валидацию синтаксиса по RFC 8259 и форматирование AST; он не осуществляет валидацию JSON Schema и не проверяет бизнес-правила приложения.

2. Форматирование — это не автоматическое исправление ошибок

Форматировщики JSON (инструменты структурирования и минификации) перераспределяют пробелы, переносы строк и отступы на основе абстрактного синтаксического дерева (AST), которое уже является синтаксически корректным. Они не являются механизмами автовосстановления поврежденных данных.

При вводе некорректного текста движок немедленно прерывает обработку на первом недопустимом байте, выводит исчерпывающую диагностику с указанием числовой позиции и фрагмента ошибки (например, Trailing comma in object is not allowed at position 45) и очищает панель вывода. Инструмент не пытается угадать намерения разработчика, не дописывает недостающие скобки, не удаляет лишние запятые и не заменяет одинарные кавычки в автоматическом режиме. Для успешного форматирования требуется ручное исправление синтаксической ошибки в исходном коде.

3. 5 наиболее распространенных синтаксических ошибок в JSON

Ошибка 1: Лишние (висячие) запятые в объектах или массивах (Trailing Commas)

× Недопустимо:

{
  "name": "GoToolstack",
  "active": true,
}

Диагностика движка: Trailing comma in object is not allowed at position 45 (near "active": true, }")

✓ Корректное исправление: В стандарте RFC 8259 запятые являются исключительно разделителями элементов, а не терминаторами. Удалите запятую после последнего значения перед закрывающей скобкой } или ].

Ошибка 2: Одинарные кавычки вместо двойных

× Недопустимо:

{'status': 'success'}

Диагностика движка: Expected string key in object at position 1 (near "{'status': 'success'}")

✓ Корректное исправление: Хотя синтаксис JavaScript допускает одинарные кавычки для строк, раздел 7 стандарта RFC 8259 строго требует двойных кавычек (") для всех ключей объектов и строковых значений ({"status": "success"}).

Ошибка 3: Ключи объектов без кавычек (Unquoted Keys)

× Недопустимо:

{count: 42}

Диагностика движка: Expected string key in object at position 1 (near "{count: 42}")

✓ Корректное исправление: В отличие от гибких объектных литералов JavaScript, каждое имя свойства в JSON обязано быть заключено в двойные кавычки ({"count": 42}).

Ошибка 4: Недопустимые escape-последовательности и неэкранированные обратные слеши

× Недопустимо:

{"path": "C:\programs\data.json"}

Диагностика движка: Invalid escape sequence \p at position 13 (near "{"path": "C:\programs"}")

✓ Корректное исправление: RFC 8259 поддерживает только управляющие последовательности ", \\, /, , , , , и 4-значные шестнадцатеричные последовательности \uXXXX. Символы обратного слеша в путях Windows требуют двойного экранирования: {"path": "C:\\programs\\data.json"}.

Ошибка 5: Комментарии внутри полезной нагрузки JSON

× Недопустимо:

// Настройки сервера
{"port": 8080}

Диагностика движка: Unexpected token '/' at position 0 (near "// Настройки сервера")

✓ Корректное исправление: Стандарт JSON не поддерживает синтаксис комментариев (ни //, ни /* */). Все комментарии должны быть полностью удалены перед отправкой или форматированием данных.

4. Ловушка 64-битных целых чисел: Безупречное сохранение токенов vs. Риск потери точности во внешних системах

В стандартных движках JavaScript числа представляются в формате 64-битных чисел с плавающей запятой двойной точности IEEE 754. Верхняя граница безопасных целых чисел составляет:

Number.MAX_SAFE_INTEGER = 9,007,199,254,740,991 (2^53 - 1)

Когда API передает большие 64-битные идентификаторы, первичные ключи баз данных или хеши транзакций (например, 9007199254740993), стандартный вызов JSON.parse() незаметно округляет значение до 9007199254740992, искажая данные без генерации ошибки.

Движок GoToolstack использует специализированный парсер без потерь, который сохраняет числовые литералы в виде точных текстовых токенов в структуре AST. Благодаря этому при форматировании все цифры сохраняются неизменными. Однако локальное сохранение не гарантирует безопасности во внешних системах-получателях: если принимающий микросервис, драйвер БД или клиентское приложение затем распарсит полученный JSON стандартным парсером float64, потеря точности произойдет на их стороне. В распределенных системах большие 64-битные идентификаторы рекомендуется передавать в виде строк (например, "9007199254740993").

5. Дублирующиеся ключи объектов и неоднозначность синтаксического анализа по RFC 8259

Рассмотрим объект, содержащий повторяющиеся ключи с одинаковыми именами:

{"user": "alice", "user": "bob"}

Парсер AST GoToolstack сохраняет каждую пару ключ-значение в порядке поступления без автоматического удаления предыдущих записей. Однако раздел 4 стандарта RFC 8259 прямо указывает на то, что поведение парсеров при обработке повторяющихся ключей непредсказуемо в различном ПО:

  • Некоторые парсеры учитывают только первый встретившийся ключ и игнорируют все последующие.
  • Большинство стандартных библиотек (включая JSON.parse() в JS и json.loads() в Python) перезаписывают предыдущее значение, оставляя только последний ключ.
  • Некоторые строгие парсеры полностью отклоняют документ, выбрасывая синтаксическую ошибку.

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

6. Технические ограничения и границы возможностей инструмента

Память браузера (RAM) и объемные данные: Форматирование минифицированных JSON-файлов размером более 50 МБ может вызвать кратковременное зависание UI-потока браузера во время выделения строк в DOM. Для логов объемом в несколько гигабайт рекомендуется использовать потоковые консольные утилиты, такие как jq.

  • Отсутствие древовидного представления и валидации схем: Инструмент представляет собой лаконичный двухпанельный текстовый редактор с мгновенной диагностикой. Он не содержит интерактивного древовидного просмотрщика DOM или валидатора JSON Schema.
  • Недопустимые значения: NaN, Infinity и -Infinity не допускаются спецификацией RFC 8259. Значения JavaScript, такие как undefined, функции и циклические ссылки, не могут быть сериализованы в JSON.
  • Локальное выполнение на стороне клиента: Все операции синтаксического анализа и форматирования выполняются исключительно в памяти браузера пользователя; исходные данные никогда не отправляются на удаленные серверы.