Сериализация циклического JSON

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии мы изучим, как сериализовать JSON-объект, содержащий циклические ссылки, с использованием JavaScript. Мы будем использовать пользовательскую функцию-заменитель и WeakSet для обнаружения и пропуска циклических ссылок. В конце этого практического занятия вы будете лучше понимать, как обрабатывать циклические структуры данных в JavaScript и как сериализовать их в формат JSON.

Это Guided Lab, который предоставляет пошаговые инструкции, чтобы помочь вам учиться и практиковаться. Внимательно следуйте инструкциям, чтобы выполнить каждый шаг и получить практический опыт. Исторические данные показывают, что это лабораторная работа уровня начальный с процентом завершения 100%. Он получил 100% положительных отзывов от учащихся.

Как сериализовать циклический JSON

Для сериализации JSON-объекта, содержащего циклические ссылки, следуйте этим шагам:

  1. Откройте Терминал/SSH и введите node, чтобы начать практиковаться в написании кода.
  2. Создайте WeakSet, чтобы хранить и проверять уже виденные значения с использованием WeakSet.prototype.add() и WeakSet.prototype.has().
  3. Используйте JSON.stringify() с пользовательской функцией-заменителем, которая пропускает значения, уже присутствующие в seen, и добавляет новые значения при необходимости.
  4. ⚠️ ВНИМАНИЕ: Эта функция находит и удаляет циклические ссылки, что приводит к потере циклических данных в сериализованном 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, чтобы улучшить свои навыки.