オブジェクトをJSON.stringifyしたときに、循環参照が含まれていると以下のようなエラーが出ます。
const a = { a1: "test" };
a.aa = a;
JSON.stringify(a);
TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Object'
--- property 'aa' closes the circle
at JSON.stringify (<anonymous>)
const { decycle, encycle } = require('json-cyclic');
const a = { a1: "test" };
a.aa = a;
console.log(JSON.stringify(decycle(a)));
json-cyclicは、内部で循環参照を検出したとき、復元ができるようにタグ付けを行い、参照を削除する仕組みです。
オブジェクトを復元したい場合は以下のようにencycle
を使います。
const { decycle, encycle } = require('json-cyclic');
const a = {a1: "test"};
a.aa = a;
const json = JSON.stringify(decycle(a));
const obj = JSON.parse(json);
const b = encycle(obj);
console.log(b);
console.log(b.aa.aa.aa.a1);
ちゃんと復元できることが確認できました。