La excepción de JavaScript “valor de objeto cíclico” ocurre cuando se encuentran referencias de objetos en JSON. JSON.stringify() no trata de resolverlos y falla en consecuencia.

Mensaje

TypeError: cyclic object value(Firefox)
TypeError: Converting circular structure to JSON(Chrome and Opera)
TypeError: Circular reference in value argument not supported(Edge)

tipo de error

TypeError

¿Qué salió mal?

Él formato JSON per se no admite referencias a objetos (aunque un Existe un borrador de IETF), por lo tanto JSON.stringify() no trata de resolverlos y falla en consecuencia.

Ejemplos

Referencias circulares

En una estructura circular como la siguiente

var circularReference =otherData:123;
circularReference.myself = circularReference;

JSON.stringify() fallará

JSON.stringify(circularReference);// TypeError: cyclic object value

Para serializar referencias circulares, puede usar una biblioteca que las admita (por ejemplo, ciclo.js) o implemente una solución usted mismo, lo que requerirá encontrar y reemplazar (o eliminar) las referencias cíclicas por valores serializables.

El fragmento a continuación ilustra cómo encontrar y filtrar (provocando así la pérdida de datos) una referencia cíclica usando el replacer parámetro de JSON.stringify():

constgetCircularReplacer=()=>const seen =newWeakSet();return(key, value)=>if(typeof value ==="object"&& value !==null)if(seen.has(value))return;
      seen.add(value);return value;;;JSON.stringify(circularReference,getCircularReplacer());// "otherData":123

Ver también

  • JSON.stringify
  • ciclo.js – Introduce dos funciones, JSON.decycle y JSON.retrocycleque permite codificar y decodificar estructuras cíclicas y dags en un formato JSON extendido y retrocompatible.