Как проверить, является ли строка JSON в JavaScript

Пройдите тест, узнайте какой профессии подходите

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

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

Для проверки, соответствует ли строка формату JSON, применяется функция JSON.parse() в сочетании с конструкцией try-catch. Если разбор строки прошёл успешно, значит, она соответствует формату JSON. В случае неудачи будет сгенерирована ошибка. Ваш надёжный инструмент выглядит следующим образом:

JS
Скопировать код
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
Кинга Идем в IT: пошаговый план для смены профессии

Улучшаем проверку: повышаем точность

Однако, хороший подход предслагает использовать поле content-type в HTTP-ответах либо свойство responseJSON при AJAX-запросах. Это помощь в различении JSON и ошибок существенно облегчает взаимодействие пользователя с вашим приложением. Это своего рода бармен, который проверяет правильность формата данных перед их подачей.

Осторожно, ложные срабатывания!

Возможны ситуации, когда простая проверка isJSON может дать ложные положительные результаты. Например, JSON.parse("true") возвращает true, что может вызвать недоумение, если вы ожидали объект или массив. Давайте улучшим критерии нашей проверки:

JS
Скопировать код
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:

Markdown
Скопировать код
Представим, что строка — это кусочек пазла (🧩). Чтобы быть признанным валидным JSON, он должен без проблем войти в общую картину данных (🧱). Проверим:

Строка: "{\"key\":\"value\"}"

Тест на соответствие:

JS
Скопировать код
try {
  JSON.parse(string); // Наше упорное 🧩 старается влиться в 🧱.
  console.log("✅ Отлично подходит! Это JSON."); // 🧩: Я в деле!
} catch (error) {
  console.log("❌ Не вписывается. Не JSON."); // 🧩: Возможно, в другой раз.
}

Результат:

  • Если 🧩 хорошо уложился в 🧱, то перед нами — валидный JSON.
  • Если нет — мы столкнулись не с JSON. Но всегда есть следующая попытка!

Обработка ошибок и обратная связь

Функция safeJsonParse помогает изящно обрабатывать исключения и предоставлять пользователю полезную обратную связь:

JS
Скопировать код
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, но не соответствующие его синтаксису.

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

  1. JSON – JavaScript | MDN — Основное руководство по работе с JSON.
  2. Как проверить строку на последовательность JSON? – Stack Overflow — Обсуждение методик тестирования строк JSON на Stack Overflow.
  3. Онлайн-валидация и форматирование JSON – JSON Lint — Путь к профессиональной валидации и форматированию вашего JSON.
  4. try-json-parse – npm — npm пакет для более продвинутых способов парсинга JSON.
  5. ECMA-404 – Ecma International — Стандарт, описывающий формат обмена данными JSON.
  6. Использование JSON.parse() и JSON.stringify() | DigitalOcean — Подробное руководство о функциональности JSON.parse() и JSON.stringify().
  7. JSON5 – JSON, созданный для человека | JSON5 — Знакомство с JSON5, улучшенной версией JSON с расширенными возможностями обработки ошибок.