TypeError: cyclic object value

提示信息

TypeError: cyclic object value (Firefox)
TypeError: Converting circular structure to JSON (Chrome)

错误类型

TypeError

哪里出错了?

当调用 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 and JSON.retrocycle, which make it possible to encode cyclical structures and dags in JSON, and to then recover them.