Tengo una definición de objeto JavaScript que contiene una referencia circular: tiene una propiedad que hace referencia al objeto principal.Stringify (convertir a JSON) un objeto JavaScript con referencia circular
También tiene funciones que no quiero que pasen al servidor. ¿Cómo serializaría y deserializaría estos objetos?
He leído que el mejor método para hacer esto es usar el stringify de Douglas Crockford. Sin embargo, estoy recibiendo el siguiente error en Chrome:
TypeError: Converting circular structure to JSON
El código:
function finger(xid, xparent){
this.id = xid;
this.xparent;
//other attributes
}
function arm(xid, xparent){
this.id = xid;
this.parent = xparent;
this.fingers = [];
//other attributes
this.moveArm = function() {
//moveArm function details - not included in this testcase
alert("moveArm Executed");
}
}
function person(xid, xparent, xname){
this.id = xid;
this.parent = xparent;
this.name = xname
this.arms = []
this.createArms = function() {
this.arms[this.arms.length] = new arm(this.id, this);
}
}
function group(xid, xparent){
this.id = xid;
this.parent = xparent;
this.people = [];
that = this;
this.createPerson = function() {
this.people[this.people.length] = new person(this.people.length, this, "someName");
//other commands
}
this.saveGroup = function() {
alert(JSON.stringify(that.people));
}
}
Se trata de un caso de prueba que he creado para esta pregunta. Hay errores dentro de este código, pero esencialmente tengo objetos dentro de los objetos y una referencia que se pasa a cada objeto para mostrar cuál es el objeto principal cuando se crea el objeto. Cada objeto también contiene funciones, que no quiero que se vuelvan cadenas. Solo quiero las propiedades como Person.Name
.
¿Cómo serializo antes de enviar al servidor y deserializarlo suponiendo que se pasa el mismo JSON?
Hola, gracias por tu respuesta. Debería haber declarado que estoy usando jquery como mi biblioteca. No pensé que fuera relevante en ese momento. Actualizaré mi publicación. – user1012500
@ user1012500 - Dojo funciona bien junto con jQuery. A menudo incluyo otras bibliotecas o marcos para compensar las deficiencias en mi marco principal. Incluso puede extraer los métodos 'toJson' y' fromJson' y crear su propia envoltura jQuery alrededor de ellos. De esa forma no necesitarás tirar de todo el marco. Desafortunadamente, jQuery no tiene esta funcionalidad lista para usar, y JSON.stringify no puede manejar este tipo de objetos. Por lo tanto, aparte de los ejemplos anteriores, es posible que deba codificar esta funcionalidad usted mismo. –
Hola Brandon, dudo en agregar otra biblioteca para resolver el problema, ya que agrega otra huella al sitio. Sin embargo, le di una oportunidad al dojo e intenté usar tu ejemplo contra el mío. Sin embargo, me encontré con el problema de referencia circular (no tengo mucho conocimiento de Dojo, así que he intentado un par de cosas, pero principalmente basado en su ejemplo): http://jsfiddle.net/Af3d6/1/ – user1012500