JSON.stringify() lanza un TypeError cuando el grafo de objetos contiene una referencia circular, lo que significa que un objeto hace referencia a sí mismo (directa o indirectamente). JSON es un formato de árbol y no puede representar ciclos.
Por qué ocurre
- •Un objeto tiene una propiedad que apunta de vuelta a sí mismo o a un ancestro en el grafo.
- •Los nodos DOM a menudo tienen referencias circulares (parentNode, ownerDocument).
- •Los objetos request/response de Express contienen referencias circulares.
- •Un modelo de datos con relaciones bidireccionales (padre referenciando a hijo e hijo referenciando a padre).
Ejemplos
Código que causa el error
const a = {};
const b = { ref: a };
a.ref = b; // circular
JSON.stringify(a);Error en la terminal
TypeError: Converting circular structure to JSON
Cómo solucionarlo
Usa una función replacer en JSON.stringify() para detectar y romper los ciclos. Librerías como flatted o json-stringify-safe manejan las referencias circulares automáticamente. Considera usar structuredClone() para copias profundas en lugar de round-tripping con JSON.
Código corregido
function safeStringify(obj) {
const seen = new WeakSet();
return JSON.stringify(obj, (key, value) => {
if (typeof value === "object" && value !== null) {
if (seen.has(value)) return "[Circular]";
seen.add(value);
}
return value;
});
}Errores relacionados
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis