Проверка строки JSON в JS без try/catch: эффективные методы

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для проверки строки на валидность в отношении формата JSON в JavaScript, рекомендуется использовать функцию JSON.parse() в связке с конструкцией try..catch. Если разбор выполняется успешно, возвращаем true, в противном случае – false.

JS
Скопировать код
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 является надежным, однако иногда бывает необходима валидация без применения исключений. Приведем несколько альтернативных методов:

Функция без использования исключений:

JS
Скопировать код
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 допустимы только объекты и массивы.

JS
Скопировать код
const isValidJSONStructure = str => {
  try {
    const result = JSON.parse(str);
    return (result && typeof result === 'object' && result !== null);
  } catch (e) {
    return false;
  }
};

Учет специфической структуры JSON

Валидация массива объектов:

JS
Скопировать код
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 или вы хотели бы их избежать, стоит прибегнуть к альтернативным методам.

Подход с применением метода замены:

JS
Скопировать код
const isValidJSONAdvanced = str => {
  let replacedStr = str.replace(/[\\]/g, '@');
  if (/^[\],:{}\s]*$/.test(replacedStr)) {
    // Здесь можно разместить дополнительные проверки
    return true;
  }
  return false;
};

Визуализация

Рассматривайте JSON-строку как компонент пазла, который подходит только тогда, когда он корректно вписывается в общую структуру JSON.

Markdown
Скопировать код
Проверка пазла JSON:
Попытка уложить элемент: 🛠️ Вставляем элемент
Неудачная попытка уложить элемент: ⚠️ Элемент не соответствует структуре

С технической точки зрения код будет выглядеть так:

JS
Скопировать код
let isPuzzleComplete = piece => {
  try {
    JSON.parse(piece);
    return true;
  } catch (error) {
    return false;
  }
};
Markdown
Скопировать код
Входное значение: '{"name":"John", "age":30}' // Это часть пазла? 🧩
Выходное значение: ✅ // Отлично вписывается!

Входное значение: "name:'John', age:30" // Этот элемент подходит? ❓
Выходное значение: ❌ // Не соответствует структуре JSON.

Валидный JSON — это такой элемент, который идеально подходит под формат и структуру JSON.

Полезные материалы

  1. JSON.parse() – JavaScript | MDN — детальное описание функции JSON.parse() в документации MDN.
  2. How to check if a string is a valid JSON string? – Stack Overflow — обсуждение на Stack Overflow с множеством практичных примеров.
  3. ECMAScript® 2019 Language Specification — официальная спецификация, описывающая объект JSON.
  4. JSON — сайт Дугласа Крокфорда, посвященный всем аспектам формата JSON.
  5. GitHub – douglascrockford/JSON-js: JSON в JavaScript — авторская библиотека JSON от Дугласа Крокфорда в JavaScript.
  6. JSHint, инструмент для контроля качества JavaScript-кода — подойдет для обнаружения проблем с JSON, а также для поддержания качества кода в целом.