我得到了一个包含循环引用的 JavaScript 对象定义: 它有一个引用父对象的属性。
它还有一些我不想传递给服务器的函数。如何序列化和反序列化这些对象?
我读到过最好的方法就是使用道格拉斯·克罗克福特的 stringify。然而,我在 Chrome 中得到了以下错误:
TypeError: 将循环结构转换为 JSON
密码:
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));
}
}
这是我为这个问题创建的一个测试用例。这段代码中有错误,但本质上我有对象中的对象,以及传递给每个对象的引用,以显示在创建对象时父对象是什么。每个对象还包含函数,我不希望它们被字符串化。我只需要像 Person.Name
这样的属性。
如果传回相同的 JSON,在发送到服务器之前如何序列化并反序列化它?