zu einem JSON konvertieren. Ich habe eine JavaScript-Objektdefinition, die einen Zirkelverweis enthält: Sie hat eine Eigenschaft, die auf das Elternobjekt verweist.Ein JavaScript-Objekt mit Zirkelverweis (
Es hat auch Funktionen, die ich nicht an den Server übergeben werden soll. Wie würde ich diese Objekte serialisieren und deserialisieren?
Ich habe gelesen, dass die beste Methode, dies zu tun ist, Douglas Crockfords stringify verwenden. Aber ich bin immer die folgenden Fehler in Chrome:
TypeError: Converting circular structure to JSON
Der Code:
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));
}
}
Dies ist ein Testfall, dass ich für diese Frage erstellt. Es gibt Fehler in diesem Code, aber im Wesentlichen habe ich Objekte innerhalb von Objekten und eine Referenz, die an jedes Objekt übergeben wird, um zu zeigen, was das übergeordnete Objekt ist, wenn das Objekt erstellt wird. Jedes Objekt enthält auch Funktionen, die nicht mit einem String versehen werden sollen. Ich möchte nur die Eigenschaften wie die Person.Name
.
Wie serialisiere ich vor dem Senden an den Server und deserialize es unter der Annahme, dass das gleiche JSON zurückgegeben wird?
Hallo, danke für deine Antwort. Ich hätte sagen sollen, dass ich jquery als meine Bibliothek benutze. Ich dachte nicht, dass es zu der Zeit relevant war. Ich werde meinen Beitrag aktualisieren. – user1012500
@ user1012500 - Dojo funktioniert gut neben jQuery. Ich schließe oft andere Bibliotheken oder Frameworks ein, um Mängel in meinem primären Framework auszugleichen. Sie können möglicherweise sogar die Methoden 'toJson' und' fromJson' extrahieren und einen eigenen jQuery-Wrapper um sie erstellen. Auf diese Weise müssen Sie nicht den gesamten Rahmen einbeziehen. Leider verfügt jQuery nicht über diese Funktionalität, und JSON.stringify kann diese Objekttypen nicht verarbeiten. Anders als in den obigen Beispielen müssen Sie diese Funktionalität möglicherweise selbst programmieren. –
Hallo Brandon, ich zögere, eine weitere Bibliothek hinzuzufügen, um das Problem zu lösen, da es der Site einen weiteren Fußabdruck hinzufügt. Allerdings gab ich Dojo einen Schuss und versuchte, dein Beispiel gegen meinen zu verwenden. Allerdings stieß ich auf das zirkuläre Referenzproblem (ich habe nicht viel Wissen über Dojo, also habe ich nur ein paar Dinge versucht, aber hauptsächlich auf dein Beispiel bezogen): http://jsfiddle.net/Af3d6/1/ – user1012500