Загрузка...
Загрузка...
Руководство по типичным ошибкам в JSON: синтаксис, валидация, инструменты поиска и исправления некорректных данных.
Руководство по работе с JSON в REST API: парсинг ответов, валидация структуры, обработка ошибок и рекомендации для фронтенда и бэкенда.
Веб-разработкаПодробное руководство по работе с JSON: валидация, форматирование, минификация и обработка ошибок. Практические примеры и лучшие практики для веб-разработчиков.
РазработкаКак конвертировать CSV в JSON и обратно. Форматы данных, разделители, обработка кавычек, практические примеры на JavaScript и Python.
DevOpsJSON Schema: draft-07, 2020-12. Ключевые слова type, properties, required. Примеры валидации пользователя и API-контракта. Ajv, OpenAPI.
Поделитесь с коллегами или изучите другие материалы блога
JSON — распространённый формат обмена данными. Синтаксис строгий: лишняя запятая, неэкранированная кавычка или неверный тип могут сломать парсинг. В этой статье рассмотрены типичные ошибки JSON и способы их поиска и исправления.
JSON поддерживает: строки (в двойных кавычках), числа, true, false, null, массивы [], объекты {}. Ключи объектов — только строки в двойных кавычках.
{
"name": "Test",
"items": [1, 2, 3,]
}
Запятая после последнего элемента недопустима в JSON. В JavaScript (ES5+) trailing comma разрешён, в JSON — нет.
Исправление: удалить запятую после 3.
{
'name': 'Test'
}
JSON допускает только двойные кавычки для строк и ключей.
Исправление: заменить ' на ".
{
"path": "C:\Users\file.txt",
"quote": "He said "hello""
}
Обратный слеш \ и кавычка " внутри строки должны быть экранированы: \\, \".
Исправление:
{
"path": "C:\\Users\\file.txt",
"quote": "He said \"hello\""
}
{
"value": 01,
"nan": NaN,
"inf": Infinity
}
JSON не поддерживает ведущие нули (кроме 0), NaN, Infinity, -Infinity.
Исправление: использовать допустимые числа или строки.
{
// комментарий
"name": "Test"
}
JSON не поддерживает комментарии.
Исправление: удалить комментарии. Для конфигов с комментариями рассмотрите JSONC или YAML.
JSON должен быть в UTF-8. BOM в начале файла может вызвать ошибки в некоторых парсерах.
Исправление: сохранять файл в UTF-8 без BOM.
Типичные сообщения:
| Сообщение | Причина |
|---|---|
Unexpected token | Лишний символ, неверная запятая, неэкранированная кавычка |
Unexpected end of JSON input | Обрезанный JSON, незакрытая скобка |
Expected property name | Ошибка в ключе объекта (кавычки, запятые) |
Unexpected number | Неверный формат числа |
Парсер обычно указывает позицию (символ или строка). Используйте её как отправную точку.
JSON Formatter на rechecker.ru позволяет вставить JSON, проверить его на ошибки и получить форматированную версию. При наличии ошибок показывается сообщение и приблизительная позиция.
try {
const data = JSON.parse(jsonString);
} catch (e) {
console.error('JSON error:', e.message);
console.error('Position:', e.message.match(/position (\d+)/));
}
import json
try:
data = json.loads(json_string)
except json.JSONDecodeError as e:
print(f"Error at line {e.lineno}, column {e.colno}: {e.msg}")
Для грубой проверки типичных ошибок:
,\s*[}\]\]'[^']*'При получении JSON из API, файлов или пользовательского ввода всегда оборачивайте парсинг в try/catch. Проверяйте структуру данных после парсинга — валидный JSON может не соответствовать ожидаемой схеме.
Минифицированный JSON сложнее отлаживать. Используйте форматтер для «разворачивания» структуры. JSON Formatter на rechecker.ru форматирует JSON с отступами и переносами строк.
Работа с JSON в API, парсинг и валидация — в Работа с JSON в API: парсинг, валидация, лучшие практики. Общее руководство по валидации и форматированию — в JSON валидация и форматирование.
JSON должен быть в UTF-8. Частые проблемы:
01, 007 — невалидны в JSON. Допустимо только 0 и числа без ведущих нулей. Если нужна строка с нулями — используйте строковый тип: "007".
Обязательное экранирование: \", \\, \/, \b, \f, \n, \r, \t, \uXXXX. Контрольные символы (U+0000 – U+001F) должны быть экранированы как \uXXXX.
При глубокой вложенности легко ошибиться со скобками. Проверяйте парность { и }, [ и ]. Редакторы с подсветкой скобок помогают находить незакрытые блоки.
Расширения JSON5 и JSONC поддерживают комментарии, trailing commas, одинарные кавычки. Они не являются стандартным JSON. Если API или библиотека ожидает строгий JSON, не используйте эти расширения.
Парсеры обычно возвращают номер символа или строки. Для подсчёта позиции:
const lines = jsonString.split('\n');
const position = 42; // из сообщения об ошибке
let count = 0;
for (let i = 0; i < lines.length; i++) {
count += lines[i].length + 1;
if (count >= position) {
console.log(`Line ${i + 1}, around: ${lines[i]}`);
break;
}
}
JSON Schema позволяет описать ожидаемую структуру и типы. Библиотеки (ajv, tv4) проверяют данные на соответствие схеме. Это полезно для API и конфигов:
const Ajv = require('ajv');
const ajv = new Ajv();
const schema = { type: 'object', properties: { name: { type: 'string' } }, required: ['name'] };
const validate = ajv.compile(schema);
if (!validate(data)) console.log(validate.errors);
VS Code, WebStorm и другие IDE подсвечивают синтаксические ошибки JSON в реальном времени. Настройте линтеры (ESLint с json plugin) для автоматической проверки при сохранении.
При копировании из YAML, XML или таблиц часто возникают ошибки: неэкранированные кавычки, trailing commas, неверные типы. Всегда валидируйте результат через JSON Formatter после конвертации.