Posteriormente a investigar con especialistas en el tema, programadores de diversas ramas y profesores hemos dado con la respuesta al problema y la dejamos plasmada en este post.
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
yJSON.retrocycle
que permite codificar y decodificar estructuras cíclicas y dags en un formato JSON extendido y retrocompatible.
Si te gustó nuestro trabajo, tienes el poder dejar una división acerca de qué le añadirías a esta división.