このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
TypeError: cyclic object value
JavaScript の例外 "cyclic object value" は、JSON の中にオブジェクトの参照が見つかったときに発生します。JSON.stringify() はこれを解決しようとせず、これによって失敗します。
In this article
メッセージ
TypeError: cyclic object value (Firefox)TypeError: Converting circular structure to JSON (Chrome and Opera)TypeError: Circular reference in value argument not supported (Edge)
エラーの種類
TypeErrorエラーの原因
JSON 形式はオブジェクト参照に対応していません (IETF の草案はありますが)。したがってJSON.stringify() はこれを解決しようとせず、これによって失敗します。
例
>循環参照
次のような循環構造体では、
js
var circularReference = { otherData: 123 };circularReference.myself = circularReference;JSON.stringify() は失敗します。
js
JSON.stringify(circularReference);// TypeError: cyclic object value循環参照をシリアライズするには、それに対応したライブラリ (例えばcycle.js) を使用したり、自分自身で循環参照を探してシリアライズ可能な値に置き換える (または削除する) ことを求める解決策を実装することもできます。
次のスニペットは、JSON.stringify() のreplacer 引数を使用して循環参照を検索してフィルタリングする方法を示しています (これによりデータ損失が発生します)。
js
const getCircularReplacer = () => { const seen = new WeakSet(); return (key, value) => { if (typeof value === "object" && value !== null) { if (seen.has(value)) { return; } seen.add(value); } return value; };};JSON.stringify(circularReference, getCircularReplacer());// {"otherData":123}関連情報
JSON.stringify- cycle.js –
JSON.decycleとJSON.retrocycleという 2 つの関数を導入し、循環構造と dag を JSON でエンコードしてからリカバリーできます。