У меня есть определение объекта JavaScript, которое содержит циклическую ссылку: оно имеет свойство, которое ссылается на родительский объект.Stringify (конвертировать в JSON) объект JavaScript с круговой ссылкой
Он также имеет функции, которые я не хочу передавать на сервер. Как бы я сериализовал и десериализовал эти объекты?
Я читал, что лучший способ сделать это - использовать Дуглас Крокфорд. Тем не менее, я получаю следующее сообщение об ошибке в Chrome:
TypeError: Converting circular structure to 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 будет передан обратно?
Привет, спасибо за ваш ответ. Я должен был сказать, что я использую jquery, поскольку моя библиотека. Я не думал, что это актуально в то время. Обновите мой пост. – user1012500
@ user1012500 - Dojo отлично работает рядом с jQuery. Я часто включаю другие библиотеки или рамки, чтобы компенсировать недостатки в моей основной структуре. Вы даже можете извлечь методы 'toJson' и' fromJson' и создать вокруг них свою собственную обертку jQuery. Таким образом, вам не нужно будет тянуть всю структуру. К сожалению, jQuery не имеет этой функции из коробки, и JSON.stringify не может обрабатывать эти типы объектов. Поэтому, помимо приведенных выше примеров, вам, возможно, придется самостоятельно программировать эту функцию. –
Привет Брэндон, я не решаюсь добавить еще одну библиотеку для решения проблемы, так как она добавляет еще один след на сайт. Однако я сделал додзё выстрелом и попытался использовать ваш пример против моего. Тем не менее, я столкнулся с круглой проблемой (я не очень хорошо разбираюсь в додзё, поэтому я только что попытался сделать пару вещей, но в основном основан на вашем примере): http://jsfiddle.net/Af3d6/1/ – user1012500