Qué significa Referencia circular en JSON y cómo solucionarlo
Referencia del error
Referencia circular en JSON
Lenguaje
Severidad
MediaCuándo ocurre
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).
Posibles soluciones
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.
Errores relacionados
Más detalles
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).
Posibles soluciones
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.
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ó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;
});
}Practica en inglés
¿Cómo le explicarías un JSON Circular Reference a un compañero dev? Elige la frase correcta:
"I hit an error...
¿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