Как проверить, является ли строка JSON в JavaScript
Быстрый ответ
Для проверки, соответствует ли строка формату JSON, применяется функция JSON.parse()
в сочетании с конструкцией try-catch
. Если разбор строки прошёл успешно, значит, она соответствует формату JSON. В случае неудачи будет сгенерирована ошибка. Ваш надёжный инструмент выглядит следующим образом:
const isJSON = str => {
try {
JSON.parse(str);
return true; // Добро пожаловать в мир JSON!
} catch (e) {
return false; // К сожалению, это не JSON.
}
};
// Примеры использования функции
console.log(isJSON('{"valid":true}')); // true
console.log(isJSON('Неправильная строка')); // false
Улучшаем проверку: повышаем точность
Однако, хороший подход предслагает использовать поле content-type
в HTTP-ответах либо свойство responseJSON
при AJAX-запросах. Это помощь в различении JSON и ошибок существенно облегчает взаимодействие пользователя с вашим приложением. Это своего рода бармен, который проверяет правильность формата данных перед их подачей.
Осторожно, ложные срабатывания!
Возможны ситуации, когда простая проверка isJSON
может дать ложные положительные результаты. Например, JSON.parse("true")
возвращает true
, что может вызвать недоумение, если вы ожидали объект или массив. Давайте улучшим критерии нашей проверки:
const hasJsonStructure = str => {
if (typeof str !== 'string') return false;
try {
const result = JSON.parse(str);
const type = Object.prototype.toString.call(result);
return type === '[object Object]' || type === '[object Array]'; // Пропускаем только объекты и массивы
} catch (e) {
return false; // Это тоже не JSON
}
};
// Тестирование на разные сценарии
console.log(hasJsonStructure('{"valid":true}')); // true
console.log(hasJsonStructure('[]')); // true
console.log(hasJsonStructure('"true"')); // false, не так просто!
console.log(hasJsonStructure('null')); // false
console.log(hasJsonStructure('Некорректная строка')); // false
Визуализация
Попробуем наглядно представить задачу определения, является ли строка JSON:
Представим, что строка — это кусочек пазла (🧩). Чтобы быть признанным валидным JSON, он должен без проблем войти в общую картину данных (🧱). Проверим:
Строка: "{\"key\":\"value\"}"
Тест на соответствие:
try {
JSON.parse(string); // Наше упорное 🧩 старается влиться в 🧱.
console.log("✅ Отлично подходит! Это JSON."); // 🧩: Я в деле!
} catch (error) {
console.log("❌ Не вписывается. Не JSON."); // 🧩: Возможно, в другой раз.
}
Результат:
- Если 🧩 хорошо уложился в 🧱, то перед нами — валидный JSON.
- Если нет — мы столкнулись не с JSON. Но всегда есть следующая попытка!
Обработка ошибок и обратная связь
Функция safeJsonParse
помогает изящно обрабатывать исключения и предоставлять пользователю полезную обратную связь:
const safeJsonParse = (str) => {
try {
return [null, JSON.parse(str)];
} catch (e) {
return [e.message, null]; // Это будет хорошим утешением в случае ошибки.
}
};
// Пример использования функции
const [error, value] = safeJsonParse('Некорректная строка');
console.log(error); // SyntaxError: Unexpected token I in JSON at position 0
console.log(value); // null
Проверка на прочность
Важно тестировать функцию isJSON
с разными типами данных. Это аналог всесторонней подготовки для вашего инструмента:
- Разнообразие данных: строки, числа,
null
,undefined
. - JSON объекты и массивы, в том числе и вложенные структуры.
- Пустые объекты
{}
и массивы[]
. - Данные с синтаксическими ошибками или испорченной структурой.
- Запутанные строки, напоминающие JSON, но не соответствующие его синтаксису.
Полезные материалы
- JSON – JavaScript | MDN — Основное руководство по работе с JSON.
- Как проверить строку на последовательность JSON? – Stack Overflow — Обсуждение методик тестирования строк JSON на Stack Overflow.
- Онлайн-валидация и форматирование JSON – JSON Lint — Путь к профессиональной валидации и форматированию вашего JSON.
- try-json-parse – npm — npm пакет для более продвинутых способов парсинга JSON.
- ECMA-404 – Ecma International — Стандарт, описывающий формат обмена данными JSON.
- Использование JSON.parse() и JSON.stringify() | DigitalOcean — Подробное руководство о функциональности
JSON.parse()
иJSON.stringify()
. - JSON5 – JSON, созданный для человека | JSON5 — Знакомство с JSON5, улучшенной версией JSON с расширенными возможностями обработки ошибок.