Загрузка...
Загрузка...
Нашли баг, сбой или ошибку в работе reChecker? Есть предложение по улучшению? Напишите нам, чтобы мы проверили и исправили проблему в сервисе.
Руководство по типичным ошибкам в JSON: синтаксис, валидация, инструменты поиска и исправления некорректных данных.
Быстрые определения и связанные понятия из SEO-глоссария reChecker.
Минификация (minification) — удаление лишних символов из CSS, JS и HTML без изменения функциональности. Уменьшает размер файлов на 20-60%.
Читать в глоссарии →INP — метрика Core Web Vitals, измеряющая отзывчивость страницы на клики и нажатия. Заменила FID в марте 2024. Норма: до 200 миллисекунд.
Читать в глоссарии →Core Web Vitals — три метрики Google для оценки пользовательского опыта: LCP, INP и CLS. Влияют на ранжирование и скорость работы сайта.
Читать в глоссарии →CORS (Cross-Origin Resource Sharing) — механизм браузера для контроля запросов между разными доменами. Неправильная настройка CORS — угроза безопасности.
Читать в глоссарии →Как форматировать SQL запросы, зачем нужен SQL Formatter, правила написания читаемого SQL и онлайн-инструменты.
РазработкаКак конвертировать CSV в JSON и обратно. Форматы данных, разделители, обработка кавычек, практические примеры на JavaScript и Python.
РазработкаВсё о UUID v4: формат, версии, генерация в JavaScript, Python, SQL. Когда использовать UUID вместо автоинкремента в базах данных.
РазработкаРуководство по работе с JSON в REST API: парсинг ответов, валидация структуры, обработка ошибок и рекомендации для фронтенда и бэкенда.
Поделитесь с коллегами или изучите другие материалы блога
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 после конвертации.