0Pricing
JavaScript Academy · Урок

Стратегии безопасного разбора JSON

Безопасно разбирайте ненадёжный JSON с помощью try/catch, небольших проверок структуры, значений по умолчанию и простых вспомогательных утилит

«Стратегии безопасного разбора JSON» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 3 уроков всего.

Зачем нужен безопасный разбор

Цель: читать JSON без неожиданных последствий.

  • try/catch вокруг parse
  • Небольшая вспомогательная функция safeParse
  • Проверка структуры обязательных полей
  • Значения по умолчанию для необязательных полей
Стратегии безопасного разбора JSON — иллюстрация 1

Вспомогательная функция safeParse

Используйте небольшую функцию safeParse, чтобы избежать сбоев и ясно сообщать об ошибках.

// safeParse: never throws, returns { ok, value, error }
function safeParse(text) {
  try {
    const value = JSON.parse(text);
    return { ok: true, value: value, error: null };
  } catch (e) {
    return { ok: false, value: null, error: String(e.message) };
  }
}

// Demo
const good = safeParse("{\"name\":\"Ayla\",\"age\":20}");
const bad  = safeParse("{broken}");

console.log("good.ok:", good.ok, "name:", good.value && good.value.name);
console.log("bad.ok:", bad.ok, "error:", bad.error);
Стратегии безопасного разбора JSON — иллюстрация 2

Проверка структуры

Добавьте небольшие средства проверки обязательных полей (имя, возраст) и простых диапазонов.

// Validate required fields and simple types
function isNonEmptyString(x) {
  return typeof x === "string" && x.trim().length > 0;
}

function isNonNegativeInt(x) {
  return Number.isInteger(x) && x >= 0;
}

function validateUser(u) {
  if (u == null || typeof u !== "object") {
    return { ok: false, reason: "not an object" };
  }
  if (!isNonEmptyString(u.name)) {
    return { ok: false, reason: "name required" };
  }
  if (!isNonNegativeInt(u.age)) {
    return { ok: false, reason: "age must be a non-negative integer" };
  }
  return { ok: true };
}

// Demo
const rawUser = "{\"name\":\"Mina\",\"age\":22}";
const parsed = safeParse(rawUser);

if (parsed.ok) {
  console.log("valid?", validateUser(parsed.value));
}
Стратегии безопасного разбора JSON — иллюстрация 3

Значения по умолчанию для необязательных полей

Используйте ?? и простые проверки, чтобы задавать безопасные значения по умолчанию для необязательных полей.

// Apply defaults using nullish coalescing and spread
function normalizeUser(u) {
  const theme = (u.theme ?? "light");        // default theme
  const tags  = Array.isArray(u.tags) ? u.tags : [];
  return { ...u, theme: theme, tags: tags };
}

// Demo
const raw = "{\"name\":\"Lena\",\"age\":19}";
const p = safeParse(raw);
if (p.ok) {
  const v = normalizeUser(p.value);
  console.log("theme:", v.theme, "tags:", v.tags);
}
Стратегии безопасного разбора JSON — иллюстрация 4

Диапазоны и верхние пределы

Ограничивайте числовые диапазоны и максимальный размер массивов, чтобы данные оставались безопасными и предсказуемыми.

// Guard numbers and arrays with tiny limits
function clampNumber(x, min, max) {
  if (typeof x !== "number" || !Number.isFinite(x)) return min;
  return Math.min(max, Math.max(min, x));
}

function toStringArray(a) {
  if (!Array.isArray(a)) return [];
  return a.map(function (x) { return String(x); }).slice(0, 5); // cap length
}

// Demo
const cfgText = "{\"limit\":200,\"labels\":[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"]}";
const cfg = safeParse(cfgText);
if (cfg.ok) {
  const limit = clampNumber(cfg.value.limit, 1, 100);
  const labels = toStringArray(cfg.value.labels);
  console.log("limit:", limit, "labels:", labels);
}
Стратегии безопасного разбора JSON — иллюстрация 5

Разбор → проверка → нормализация

Последовательность действий: разобрать → проверить → нормализовать. Делайте функции маленькими и понятными.

// Putting it together: parse → validate → normalize
function readUser(jsonText) {
  const p = safeParse(jsonText);
  if (!p.ok) return { ok: false, reason: "parse: " + p.error };

  const check = validateUser(p.value);
  if (!check.ok) return { ok: false, reason: "shape: " + check.reason };

  const normalized = normalizeUser(p.value);
  return { ok: true, value: normalized };
}

// Demo
const text = "{\"name\":\"Ayla\",\"age\":21,\"tags\":[\"new\"],\"theme\":\"dark\"}";
console.log(readUser(text));
Стратегии безопасного разбора JSON — иллюстрация 6

Тест по безопасному разбору

Быстрая проверка: безопасный шаблон.

Стратегии безопасного разбора JSON — иллюстрация 7

Повторение

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

Стратегии безопасного разбора JSON — иллюстрация 8

Часто задаваемые вопросы

Урок «Стратегии безопасного разбора JSON» бесплатный?

Да — полный текст урока «Стратегии безопасного разбора JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 3 уроков всего.

Чему я научусь в уроке «Стратегии безопасного разбора JSON»?

Безопасно разбирайте ненадёжный JSON с помощью try/catch, небольших проверок структуры, значений по умолчанию и простых вспомогательных утилит Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать JavaScript Academy?

Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Стратегии безопасного разбора JSON»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке JavaScript Academy?

Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы JSON.parse и JSON.stringify
  2. Структурированное клонирование и URLSearchParams
  3. Стратегии безопасного разбора JSON
← Назад к JavaScript Academy