Вебсправочник
Справочник JavaScript

JSON.parse с reviver: преобразование выбранных значений

Функция reviver позволяет обработать значения при разборе JSON. Её полезно использовать для заранее описанного формата данных, а не как замену полноценной проверке структуры.

Назначение

Функция reviver позволяет обработать значения при разборе JSON. Её полезно использовать для заранее описанного формата данных, а не как замену полноценной проверке структуры.

Как это работает

Обработка идёт от вложенных значений к содержащим их объектам. Возврат undefined удаляет свойство. В конце вызывается обработка корня с пустым ключом, поэтому значения, которые не нужно менять, необходимо возвращать.

Пример

const text = '{"title":"CSS","minutes":"20","draftNote":"скрыть"}';
const lesson = JSON.parse(text, (key, value) => {
  if (key === "draftNote") return undefined;
  if (key === "minutes" && typeof value === "string") return Number(value);
  return value;
});
console.assert(lesson.minutes === 20);
console.assert(!Object.hasOwn(lesson, "draftNote"));
console.assert(lesson.title === "CSS");
console.log(lesson);

Что должно получиться

Строковая длительность становится числом, служебное поле удаляется, название сохраняется. Корневой объект тоже возвращён, поэтому результат разбора не исчезает.

Граница применения и частая ошибка

Преобразование Number может дать NaN или неожиданный ноль для пустой строки; допустимость нужно проверять отдельно. Одинаковое имя поля на другом уровне тоже попадёт в обработчик. Не используйте такую функцию для неописанной структуры без учёта контекста.

Самостоятельная проверка

Добавьте вложенный объект с полем minutes и посмотрите, что изменится. Затем передайте неверную числовую строку и проверьте результат через Number.isFinite. Разделите преобразование формата и проверку бизнес-правил.

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

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.