TypeError: cyclic object value (Firefox)
TypeError: Converting circular structure to JSON (Chrome)
当调用 JSON.stringify()
方法时,循环对象引用结构不能被转换为字符串。
在如下循环结构中:
var a = {};
var b = {};
a.child = b;
b.child = a;
JSON.stringify()
将会报错
JSON.stringify(a);
// TypeError: cyclic object value
在将数据转换成字符串之前需要检查是否有循环对象引用的存在。例如可以指定一个充当替换器的函数作为 JSON.stringify()
方法的第二个参数。
seen = [];
var replacer = function(key, value) {
if (value != null && typeof value == "object") {
if (seen.indexOf(value) >= 0) {
return;
}
seen.push(value);
}
return value;
};
JSON.stringify(a, replacer);
// "{"child":{}}"
或者也可以使用现成的类库或者工具函数。例如 Douglas Crockford 为此开发的 cycle.js 。
JSON.stringify
JSON.decycle
and JSON.retrocycle
, which make it possible to encode cyclical structures and dags in JSON, and to then recover them.