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:
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);
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"
}
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