Обработка ошибок при использовании JSON.parse в JavaScript

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

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

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

Для надёжной работы с JSON.parse использование блока try-catch является наилучшим решением. Этот подход обеспечивает стабильность приложения, даже когда возникают ошибки во время разбора данных.

Пример:

JS
Скопировать код
let data = '{"valid": true}';

try {
  data = JSON.parse(data); // Приступим к разбору данных.
} catch (e) {
  console.error("При разборе JSON произошла ошибка:", e); // Упс, произошли проблемы с JSON!
}

Благодаря try-catch мы можем корректно обрабатывать случаи с некорректными JSON данными, вместо того чтобы встречаться с серьёзными проблемами в приложении.

Кинга Идем в IT: пошаговый план для смены профессии

Стратегии для различных сценариев

Во время работы с разбором JSON, готовьтесь к ошибкам и научитесь корректно на них реагировать.

Предварительная проверка ответа

Важно проверять HTTP-статусы перед тем, как начать разбор JSON-данных из ответа сервера. Это позволяет предотвратить попытки разбора ошибочных ответов типа 404 Not Found и экономит ваши ресурсы для обработки реально значимых данных.

JS
Скопировать код
function fetchAndParse(url) {
  return fetch(url)
    .then(response => {
      if (!response.ok) {
        throw new Error('Обнаружена HTTP-ошибка');
      }
      return response.json(); // Вот он, готовый для разбора JSON!
    })
    .catch(error => {
      console.error("Произошла ошибка при получении и разборе данных:", error);
    });
}

Особое внимание к входным данным

Перед разбором обязательно убедитесь, что входная строка действительно является строкой. В противном случае, нежелательные элементы могут вызвать ошибки.

JS
Скопировать код
function safeParse(input) {
  if (typeof input !== 'string') throw new Error('Входные данные не являются строкой.');
  try {
    return JSON.parse(input);
  } catch (error) {
    console.error("Обнаружены ошибки при разборе JSON:", error.message); // У нас проблема!
    return null;
  }
}

Особый случай SyntaxError

Иногда JSON.parse может генерировать исключения типа SyntaxError. В этом случае полезно использовать дополнительный код обработки.

JS
Скопировать код
try {
  data = JSON.parse(data); // Процесс разбора идет успешно...
} catch (e) {
  if (e instanceof SyntaxError) {
    console.error("Обнаружен SyntaxError:", e.message); // Оповещаем о проблеме!
    // Здесь может быть особая логика обработки SyntaxError.
  } else {
    throw e; // Другие типы ошибок передаем дальше.
  }
}

Более детальный контроль с помощью функции reviver

Функция JSON.parse() может принимать функцию reviver в качестве второго аргумента, что предоставляет возможность более глубокого контроля над процессом разбора.

JS
Скопировать код
JSON.parse(data, (key, value) => {
  // Здесь мы можем вносить корректировки в процессе разбора.
  return key === 'date' ? new Date(value) : value;
});

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

Работу с JSON.parse можно сравнить с ходьбой по канату:

Markdown
Скопировать код
| Сценарий                    | Действие                |
|-----------------------------|------------------------|
| 🚶 Хождение по канату       | JSON.parse(data)       |
| 🤹‍♀️ Удержание баланса      | все идеально           |
| 🌀 Неожиданный порыв ветра   | внезапный SyntaxError  |
| 🤸‍♂ Сеть безопасности       | try { ... } catch { ... } |

Воспринимайте try...catch как свою сеть безопасности:

JS
Скопировать код
try {
    const result = JSON.parse(data); // 🚶 Идем по канату
    // 🤹‍♀️ Удерживаем баланс
} catch (error) {
    // 🌀 Произошла неожиданная ошибка, требуется принять меры
    handleInvalidJSON(error);       // 🤸‍♂ Благодаря сети, падение было мягким. Слава богу!
}

Безопасность превыше всего! Всегда используйте сеть безопасности при работе с JSON. 🎪👍

Продвинутые стратегии обработки ошибок

Для создания устойчивого и легкого в поддержке приложения необходимо ознакомиться со следующими стратегиями обработки исключений при использовании JSON.parse.

Централизованная обработка ошибок

Создание централизованной функции обработки ошибок помогает быстро справляться с неожиданными проблемами при разборе данных:

JS
Скопировать код
function parseJSON(input, fallback = {}) {
  try {
    return JSON.parse(input); // Всегда надеемся на лучшее.
  } catch (e) {
    console.error("Ошибка при разборе JSON:", e);
    return fallback; // Всегда полезно иметь запасной план.
  }
}

Сохранение единообразия данных

Гарантия единообразия данных имеет большое значение, также как и соблюдение норм в общении на вечеринке. Любые нарушения могут привести к проблемам.

Разбор многострочных строк с использованием обратных кавычек

Так же как обратные кавычки (`) помогают сохранить порядок в общении со сложными людьми, они полезны и для разбора многострочных строк:

JS
Скопировать код
let jsonString = `{
  "key": "value",
  "number": 123
}`;

Управление потоком ошибок

В тех случаях, когда это необходимо, вы можете создать новое исключение внутри блока catch, чтобы более эффективно управлять ошибками:

JS
Скопировать код
catch (e) {
  throw new Error("Призовем охрану JSON!", { cause: e });
}

Подготовка к потенциальным сбоям

У вас всегда должен быть готов план действий в случае возникновения ошибок. Метод должен возвращать результат – либо корректно разобранные данные, либо запасной вариант.

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

  1. JSON.parse() – JavaScript | MDN — Проработанная информация о JSON.parse() в JavaScript.
  2. How to check if a string is a valid JSON string? – Stack Overflow — Основательного обсуждение вопросов обработки ошибок в JSON.parse.
  3. Документация Node.js v21.6.1 — Официальное описание Node.js, содержащее информацию об ошибках, связанных с JSON.parse.
  4. safe-json-parse – npm — Более безопасный альтернатива JSON.parse, которая предотвращает распространённые ошибки.
  5. Обработка ошибок с обещаниями в JavaScript – Fun Fun Function – YouTube — Видео о ключевых принципах обработки ошибок при парсинге JSON.
  6. Bugs and Errors :: Eloquent JavaScript — Глава, знакомая многим, из книги по JavaScript, рассказывающая о способах обработки ошибок.
Свежие материалы