Serializar JSON circular

JavaScriptJavaScriptBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, exploraremos cómo serializar un objeto JSON que contiene referencias circulares utilizando JavaScript. Utilizaremos una función reemplazadora personalizada y un WeakSet para detectar y omitir referencias circulares. Al final de este laboratorio, tendrás una mejor comprensión de cómo manejar estructuras de datos circulares en JavaScript y cómo serializarlas en formato 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{{"Serializar JSON circular"}} javascript/data_types -.-> lab-28629{{"Serializar JSON circular"}} javascript/arith_ops -.-> lab-28629{{"Serializar JSON circular"}} javascript/comp_ops -.-> lab-28629{{"Serializar JSON circular"}} javascript/cond_stmts -.-> lab-28629{{"Serializar JSON circular"}} javascript/obj_manip -.-> lab-28629{{"Serializar JSON circular"}} javascript/destr_assign -.-> lab-28629{{"Serializar JSON circular"}} javascript/json -.-> lab-28629{{"Serializar JSON circular"}} end

Cómo serializar un JSON circular

Para serializar un objeto JSON que contiene referencias circulares, siga estos pasos:

  1. Abra la Terminal/SSH y escriba node para comenzar a practicar la codificación.
  2. Cree un WeakSet para almacenar y comprobar valores ya vistos utilizando WeakSet.prototype.add() y WeakSet.prototype.has().
  3. Utilice JSON.stringify() con una función reemplazadora personalizada que omita valores ya presentes en seen y agregue nuevos valores si es necesario.
  4. ⚠️ AVISO: Esta función encuentra y elimina referencias circulares, lo que causa la pérdida de datos circulares en el JSON serializado.

Aquí está el código para la función 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;
  });
};

Para probar la función, puede crear un objeto con una referencia circular y llamar a stringifyCircularJSON:

const obj = { n: 42 };
obj.obj = obj;
stringifyCircularJSON(obj); // '{"n": 42}'

Resumen

¡Felicitaciones! Has completado el laboratorio de serialización de JSON circular. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.