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 не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.