JSON.stringify(): сериализация и выбор полей
JSON.stringify преобразует поддерживаемые данные JavaScript в текст JSON. Результат подходит для передачи или сохранения, но не сохраняет все свойства и типы исходного объекта.
Назначение
JSON.stringify преобразует поддерживаемые данные JavaScript в текст JSON. Результат подходит для передачи или сохранения, но не сохраняет все свойства и типы исходного объекта.
Как это работает
Второй аргумент может задавать список включаемых имён свойств, третий — отступы для читаемого вывода. Значение undefined в объекте пропускается, а на позиции массива превращается в null.
Пример
const lesson = {title: "CSS", minutes: 20, note: undefined};
const text = JSON.stringify(lesson, ["title", "minutes"], 2);
console.assert(JSON.parse(text).minutes === 20);
console.assert(JSON.stringify({a: undefined}) === "{}");
console.assert(JSON.stringify([undefined]) === "[null]");
const cycle = {}; cycle.self = cycle;
let rejected = false;
try { JSON.stringify(cycle); } catch (error) { rejected = error instanceof TypeError; }
console.assert(rejected);
console.log(text);
Что должно получиться
Первый результат содержит выбранные поля с удобными отступами. Дополнительные проверки показывают потерю undefined и ошибку при циклической ссылке. Текст JSON не является исполняемой программой.
Граница применения и частая ошибка
Сериализация не является универсальным глубоким клонированием. Не включайте в отчёт секреты, токены и внутренние поля по умолчанию. Даты и пользовательские toJSON могут изменить представление, а некоторые типы требуют отдельного решения.
Самостоятельная проверка
Создайте объект для публичного экспорта с явным набором разрешённых полей. Добавьте вложенное значение и проверьте фактический результат. Сравните компактный JSON и форматированный, не предполагая, что пробелы меняют данные.
Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.