📋
← Назад к руководствам

Распространённые синтаксические ошибки JSON и как их исправить с помощью валидатора

· Теги: json, json-errors, json-validation, json-syntax, debugging, developer-tips

Распространённые ошибки JSON

Строгие синтаксические правила JSON означают, что даже один неправильно поставленный символ может сломать весь документ. Понимание наиболее распространённых ошибок JSON поможет вам быстрее выполнять отладку и избегать повторения одних и тех же ошибок. Ниже приведены наиболее частые проблемы, с которыми сталкиваются разработчики, с понятными объяснениями и исправлениями для каждой из них.

1. Висячие запятые

Ошибка: Unexpected token в конце объекта или массива

Висячие запятые разрешены в объектах и массивах JavaScript, но строго запрещены в JSON.

Невалидный JSON:

{
  "name": "Alice",
  "age": 30,
}

Исправление: Удалите запятую после последнего элемента.

{
  "name": "Alice",
  "age": 30
}

Массивы с висячими запятыми:

// Invalid
[1, 2, 3,]

// Valid
[1, 2, 3]

2. Отсутствующие или некорректные кавычки вокруг ключей

Ошибка: Unexpected identifier или Expected double-quoted property name

JSON требует, чтобы все ключи объектов были заключены в двойные кавычки. Одинарные кавычки и ключи без кавычек недопустимы, даже если они работают в JavaScript.

Невалидный JSON:

{
  name: "Alice",
  'occupation': "Engineer"
}

Исправление: Всегда заключайте ключи в двойные кавычки.

{
  "name": "Alice",
  "occupation": "Engineer"
}

3. Использование одинарных кавычек для строковых значений

Ошибка: Unexpected identifier или Unterminated string

Так же, как и ключи, строковые значения в JSON должны использовать двойные кавычки. Одинарные кавычки недопустимы.

Невалидный JSON:

{ "greeting": 'Hello, world!' }

Исправление: Замените одинарные кавычки на двойные.

{ "greeting": "Hello, world!" }

Совет: Если ваша строка содержит двойные кавычки, экранируйте их с помощью обратной косой черты: "He said, \"Hello\"".

4. Неэкранированные специальные символы

Ошибка: Unexpected token или Invalid character

Некоторые символы должны быть экранированы в строках JSON: двойные кавычки ("), обратные косые черты (\) и управляющие символы.

Невалидный JSON:

{
  "path": "C:\Users\Documents\file.json",
  "quote": "He said "hello""
}

Исправление: Правильно экранируйте обратные косые черты и двойные кавычки.

{
  "path": "C:\\Users\\Documents\\file.json",
  "quote": "He said \"hello\""
}

Полный список escape-последовательностей JSON

| Последовательность | Представляет | |----------|-----------| | \" | Двойная кавычка | | \\ | Обратная косая черта | | \/ | Прямая косая черта | | \b | Возврат на шаг (Backspace) | | \f | Перевод страницы (Form feed) | | \n | Перевод строки (Newline) | | \r | Возврат каретки (Carriage return) | | \t | Табуляция | | \uXXXX | Символ Unicode (например, é для e) |

5. Недопустимые числовые форматы

Ошибка: Unexpected number или Invalid number

JSON имеет особые правила форматирования чисел:

  • Ведущие нули не допускаются (01 недопустимо)
  • Одиночный ведущий ноль разрешён только для числа 0
  • Числа не могут иметь висячую точку (10. недопустимо)
  • Шестнадцатеричные, восьмеричные и двоичные форматы не поддерживаются

Невалидный JSON:

{
  "invalid1": 01,
  "invalid2": 10.,
  "invalid3": 0xFF,
  "invalid4": 1,000
}

Исправление:

{
  "valid1": 1,
  "valid2": 10.0,
  "valid3": 255,
  "valid4": 1000
}

6. Недопустимые значения: undefined, NaN, Infinity

Ошибка: Unexpected token для undefined, NaN, Infinity

JavaScript имеет значения, у которых нет эквивалента в JSON. Они вызовут ошибки парсинга:

Невалидный JSON:

{
  "undefinedVal": undefined,
  "notANumber": NaN,
  "infinity": Infinity
}

Исправление: Замените на допустимые значения JSON или используйте соглашение.

{
  "undefinedVal": null,
  "notANumber": null,
  "infinity": 1.7976931348623157e+308
}

7. Лишние или пропущенные запятые

Ошибка: Expected comma или Unexpected token

Запятые в JSON должны разделять каждую пару ключ/значение и каждый элемент массива, но не должны находиться после последнего элемента.

Пропущенная запятая (невалидный):

{
  "name": "Alice"
  "age": 30
}

Исправление: Добавьте недостающую запятую.

{
  "name": "Alice",
  "age": 30
}

8. Проблемы глубоко вложенных структур

Ошибка: Maximum call stack size exceeded или таймаут парсера

Хотя это не синтаксическая ошибка, глубоко вложенный JSON (10+ уровней) может вызвать проблемы с производительностью и сделать отладку крайне сложной.

Проблемная структура:

{
  "level1": {
    "level2": {
      "level3": {
        "level4": {
          "level5": {
            "level6": {
              "value": "too deep"
            }
          }
        }
      }
    }
  }
}

Лучший подход: Упростите структуру или используйте ссылки.

{
  "users": {
    "alice": { "role": "admin" }
  },
  "permissions": {
    "admin": ["read", "write", "delete"]
  }
}

9. Отсутствующие открывающие или закрывающие фигурные скобки

Ошибка: Expected ',' or '}' или Unexpected end of JSON input

Непарные фигурные и квадратные скобки — распространённый источник ошибок JSON, особенно в больших или написанных вручную файлах JSON.

Невалидный JSON:

{
  "name": "Alice",
  "items": [1, 2, 3
}

Исправление: Убедитесь, что каждой { соответствует }, и каждой [ соответствует ].

{
  "name": "Alice",
  "items": [1, 2, 3]
}

Совет профессионала: Используйте правильные отступы в JSON, чтобы визуально сопоставлять открывающие и закрывающие скобки. JSON форматтер может сделать это автоматически.

Как эффективно отлаживать ошибки JSON

  1. Используйте JSON валидатор — вставьте ваш JSON в бесплатный JSON валидатор чтобы получить точную строку и столбец первой ошибки.
  2. Проверяйте по частям — для больших файлов проверяйте по одному разделу за раз, чтобы изолировать ошибку.
  3. Остерегайтесь артефактов копирования и вставки — невидимые символы, «умные» кавычки и неразрывные пробелы часто проникают из текстовых процессоров или веб-страниц.
  4. Проверяйте кодировку символов — убедитесь, что ваш файл сохранён в UTF-8. Другие кодировки могут создавать невидимые ошибки.
  5. Используйте линтер — инструменты, такие как ESLint с плагином json, обнаруживают ошибки JSON во время разработки.

Помните: парсеры JSON обычно сообщают только о первой синтаксической ошибке. Исправьте её, проверьте снова и повторяйте, пока документ не пройдёт проверку. Наш инструмент JSON Formatter & Validator предоставляет мгновенные, подробные сообщения об ошибках для ускорения этого процесса.