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

JavaScriptJavaScriptBeginner
Практиковаться сейчас

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/NetworkingGroup(["Networking"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/BasicConceptsGroup -.-> javascript/obj_manip("Object Manipulation") javascript/AdvancedConceptsGroup -.-> javascript/destr_assign("Destructuring Assignment") javascript/NetworkingGroup -.-> javascript/json("JSON") subgraph Lab Skills javascript/variables -.-> lab-28629{{"Сериализация циклического JSON"}} javascript/data_types -.-> lab-28629{{"Сериализация циклического JSON"}} javascript/arith_ops -.-> lab-28629{{"Сериализация циклического JSON"}} javascript/comp_ops -.-> lab-28629{{"Сериализация циклического JSON"}} javascript/cond_stmts -.-> lab-28629{{"Сериализация циклического JSON"}} javascript/obj_manip -.-> lab-28629{{"Сериализация циклического JSON"}} javascript/destr_assign -.-> lab-28629{{"Сериализация циклического JSON"}} javascript/json -.-> lab-28629{{"Сериализация циклического JSON"}} end

Как сериализовать циклический 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, чтобы улучшить свои навыки.