Распространённые синтаксические ошибки JSON и как их исправить с помощью валидатора
Распространённые ошибки 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
- Используйте JSON валидатор — вставьте ваш JSON в бесплатный JSON валидатор чтобы получить точную строку и столбец первой ошибки.
- Проверяйте по частям — для больших файлов проверяйте по одному разделу за раз, чтобы изолировать ошибку.
- Остерегайтесь артефактов копирования и вставки — невидимые символы, «умные» кавычки и неразрывные пробелы часто проникают из текстовых процессоров или веб-страниц.
- Проверяйте кодировку символов — убедитесь, что ваш файл сохранён в UTF-8. Другие кодировки могут создавать невидимые ошибки.
- Используйте линтер — инструменты, такие как ESLint с плагином
json, обнаруживают ошибки JSON во время разработки.
Помните: парсеры JSON обычно сообщают только о первой синтаксической ошибке. Исправьте её, проверьте снова и повторяйте, пока документ не пройдёт проверку. Наш инструмент JSON Formatter & Validator предоставляет мгновенные, подробные сообщения об ошибках для ускорения этого процесса.