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() の第 2 引数に指定します。

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.jsJSON.decycle JSON.retrocycle という 2 つの関数を導入し、循環構造と dag を JSON でエンコードしてからリカバリーできます。

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama
 最終更新者: YuichiNukiyama,