Проверка строки JSON в JS без try/catch: эффективные методы
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для проверки строки на валидность в отношении формата JSON в JavaScript, рекомендуется использовать функцию JSON.parse()
в связке с конструкцией try..catch
. Если разбор выполняется успешно, возвращаем true
, в противном случае – false
.
const isValidJSON = str => {
try {
JSON.parse(str);
return true;
} catch (e) {
return false;
}
};
// Примеры использования:
console.log(isValidJSON('{"valid": true}')); // возвращает true
console.log(isValidJSON('Неверный JSON')); // возвращает false
Альтернативные варианты и подводные камни валидации
Подход с использованием try..catch
является надежным, однако иногда бывает необходима валидация без применения исключений. Приведем несколько альтернативных методов:
Функция без использования исключений:
function isJSONWithoutExceptions(str) {
if (/^[\],:{}\s]*$/.test(str
.replace(/\\["\\\/bfnrtu]/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
return true;
}
return false;
}
Этот подход использует регулярные выражения для проверки структурной корректности JSON-строки.
Проверка результата парсинга:
В этом случае строку анализируют, после чего проверяют тип полученного результата. Для валидного JSON-формата в JavaScript допустимы только объекты и массивы.
const isValidJSONStructure = str => {
try {
const result = JSON.parse(str);
return (result && typeof result === 'object' && result !== null);
} catch (e) {
return false;
}
};
Учет специфической структуры JSON
Валидация массива объектов:
const isArrayOfObjectsValid = str => {
try {
const jsonArray = JSON.parse(str);
return Array.isArray(jsonArray) &&
jsonArray.every(item => typeof item === 'object' && item !== null);
} catch (e) {
return false;
}
};
Через этот метод сначала осуществляется проверка результата парсинга на соответствие массиву, а затем – проверяется, соответствует ли каждый элемент массива требованиям JSON-объекта.
Отладка примеров из реальной практики
Если при отладке возникают трудности при использовании try..catch
или вы хотели бы их избежать, стоит прибегнуть к альтернативным методам.
Подход с применением метода замены:
const isValidJSONAdvanced = str => {
let replacedStr = str.replace(/[\\]/g, '@');
if (/^[\],:{}\s]*$/.test(replacedStr)) {
// Здесь можно разместить дополнительные проверки
return true;
}
return false;
};
Визуализация
Рассматривайте JSON-строку как компонент пазла, который подходит только тогда, когда он корректно вписывается в общую структуру JSON.
Проверка пазла JSON:
Попытка уложить элемент: 🛠️ Вставляем элемент
Неудачная попытка уложить элемент: ⚠️ Элемент не соответствует структуре
С технической точки зрения код будет выглядеть так:
let isPuzzleComplete = piece => {
try {
JSON.parse(piece);
return true;
} catch (error) {
return false;
}
};
Входное значение: '{"name":"John", "age":30}' // Это часть пазла? 🧩
Выходное значение: ✅ // Отлично вписывается!
Входное значение: "name:'John', age:30" // Этот элемент подходит? ❓
Выходное значение: ❌ // Не соответствует структуре JSON.
Валидный JSON — это такой элемент, который идеально подходит под формат и структуру JSON.
Полезные материалы
- JSON.parse() – JavaScript | MDN — детальное описание функции
JSON.parse()
в документации MDN. - How to check if a string is a valid JSON string? – Stack Overflow — обсуждение на Stack Overflow с множеством практичных примеров.
- ECMAScript® 2019 Language Specification — официальная спецификация, описывающая объект JSON.
- JSON — сайт Дугласа Крокфорда, посвященный всем аспектам формата JSON.
- GitHub – douglascrockford/JSON-js: JSON в JavaScript — авторская библиотека JSON от Дугласа Крокфорда в JavaScript.
- JSHint, инструмент для контроля качества JavaScript-кода — подойдет для обнаружения проблем с JSON, а также для поддержания качества кода в целом.