Lingua-e
← Errores
JavaScript

Qué significa Referencia circular en JSON y cómo solucionarlo

Referencia del error

Referencia circular en JSON

Lenguaje

JavaScript

Severidad

Media

Cuá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.

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

JavaScript

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