JSON.stringify cycle对象

对于有循环引用的JS对象,用JSON.stringify会产生typeError。

解决办法:编写一个replacer作为stringify的第二个参数。我这里封装了一个方法,传入对象,返回Json字符,代码如下:

function cycleObjectToJSON(o) {
    var cache = [];
    return JSON.stringify(o, function(key, value) {
        if(['form','dialog'].includes(key)) {return;}
        if (typeof value === "object" && value !== null) {
            if (cache.indexOf(value) !== -1) {
                // Duplicate reference found
                try {
                    // If this value does not reference a parent it can be deduped
                    return JSON.parse(JSON.stringify(value));
                } catch (error) {
                    // discard key if value cannot be deduped
                    return;
                }
            }
            // Store value in our collection
            cache.push(value);
        }
        return value;
    });
}

参考资料

你可能感兴趣的:(JSON.stringify cycle对象)