TypeError: Conversión de estructura circular a JSON

Shiv Yadav 15 febrero 2024
TypeError: Conversión de estructura circular a JSON

Cuando enviamos un objeto que contiene referencias circulares a la función JSON.stringify(), obtenemos el problema TypeError: Converting circular structure to JSON. Antes de convertir el objeto a JSON, evite cualquier referencia circular.

Arreglar TypeError: Convertir estructura circular a JSON en JavaScript

Este problema se puede resolver usando el paquete flatted. El paquete flatted es un analizador circular JSON que es increíblemente ligero y rápido, directamente del inventor de CircularJSON.

Primero, debe instalar un paquete flatted, y puede hacerlo de la siguiente manera.

npm i flatted

Veamos un ejemplo de uso de un paquete aplanado.

const {parse, stringify} = require('flatted/cjs');

var sports = [{cricket: 1}, {football: '2'}];
sports[0].a = sports;
stringify(sports);

console.log(sports);

Producción:

usar paquete plano

JSON.stringify() no solo convierte objetos válidos en cadenas, sino que también tiene un parámetro de reemplazo que puede reemplazar valores si la función está configurada.

let sportsmanObj = {
  name: 'Shiv',
  age: 22,
  gender: 'Male',
};

sportsmanObj.myself = sportsmanObj;

const circularFunc = () => {
  const sited = new WeakSet();
  return (key, value) => {
    if (typeof value === 'object' && value !== null) {
      if (sited.has(value)) {
        return;
      }
      sited.add(value);
    }
    return value;
  };
};

JSON.stringify(sportsmanObj, circularFunc());
console.log(sportsmanObj);

Ejecutar código

Estamos llamando al objeto WeakSet en nuestro circularFunc anterior, que es un objeto que almacena elementos débiles o punteros a cosas.

Cada objeto en un WeakSet solo puede aparecer una vez, eliminando datos repetitivos o circulares. La palabra clave nuevo es un operador para crear un nuevo objeto.

Hemos anidado sentencias if en nuestra sentencia return. El operador typeof se usa en nuestra primera instrucción if para devolver la primitiva (Undefined, Null, Boolean, Number, String, Function, BigInt, Symbol ) siendo evaluado.

Si nuestro tipo de valor es precisamente equivalente a un objeto y la importancia de ese objeto no es nula, se procederá a la segunda condición if, que comprobará si el valor está en el WeakSet(). Enviamos nuestra estructura circular original y el método de reemplazo a JSON.stringify().

Esto nos dará el resultado en cadena que queremos en la consola.

{
  age: 22,
  gender: "Male",
  myself: [circular object Object],
  name: "Shiv"
}
Autor: Shiv Yadav
Shiv Yadav avatar Shiv Yadav avatar

Shiv is a self-driven and passionate Machine learning Learner who is innovative in application design, development, testing, and deployment and provides program requirements into sustainable advanced technical solutions through JavaScript, Python, and other programs for continuous improvement of AI technologies.

LinkedIn

Artículo relacionado - JavaScript Error