提示信息
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()
方法的第二个参数。
var 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
- cycle.js – Introduces two functions,
JSON.decycle
andJSON.retrocycle
, which make it possible to encode cyclical structures and dags in JSON, and to then recover them.