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