Stringify (преобразование в JSON )объект JavaScript с циклической ссылкой

У меня есть определение объекта 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 передается обратно?

68
задан Luca Kiebel 11 September 2018 в 12:08
поделиться