Введение
В этом практическом занятии мы изучим, как сериализовать JSON-объект, содержащий циклические ссылки, с использованием JavaScript. Мы будем использовать пользовательскую функцию-заменитель и WeakSet для обнаружения и пропуска циклических ссылок. В конце этого практического занятия вы будете лучше понимать, как обрабатывать циклические структуры данных в JavaScript и как сериализовать их в формат JSON.
Как сериализовать циклический JSON
Для сериализации JSON-объекта, содержащего циклические ссылки, следуйте этим шагам:
- Откройте Терминал/SSH и введите
node, чтобы начать практиковаться в написании кода. - Создайте
WeakSet, чтобы хранить и проверять уже виденные значения с использованиемWeakSet.prototype.add()иWeakSet.prototype.has(). - Используйте
JSON.stringify()с пользовательской функцией-заменителем, которая пропускает значения, уже присутствующие вseen, и добавляет новые значения при необходимости. - ⚠️ ВНИМАНИЕ: Эта функция находит и удаляет циклические ссылки, что приводит к потере циклических данных в сериализованном JSON.
Вот код для функции stringifyCircularJSON:
const stringifyCircularJSON = (obj) => {
const seen = new WeakSet();
return JSON.stringify(obj, (key, value) => {
if (value !== null && typeof value === "object") {
if (seen.has(value)) return;
seen.add(value);
}
return value;
});
};
Для тестирования функции вы можете создать объект с циклической ссылкой и вызвать stringifyCircularJSON:
const obj = { n: 42 };
obj.obj = obj;
stringifyCircularJSON(obj); // '{"n": 42}'
Резюме
Поздравляем! Вы завершили практическое занятие по сериализации циклического JSON. Вы можете выполнить больше практических занятий в LabEx, чтобы улучшить свои навыки.