Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8829

JSON.stringifyで`TypeError: Converting circular structure to JSON`というエラーが出た時の対処法

$
0
0

オブジェクトをJSON.stringifyしたときに、循環参照が含まれていると以下のようなエラーが出ます。

コード
consta={a1:"test"};a.aa=a;JSON.stringify(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>)

対処法

json-cyclicを使えば解決します。

json-cyclic - npm
https://www.npmjs.com/package/json-cyclic

npm install json-cyclic
コード
const{decycle,encycle}=require('json-cyclic');consta={a1:"test"};a.aa=a;console.log(JSON.stringify(decycle(a)));
実行結果
{"a1":"test","aa":{"$ref":"$"}}

json-cyclicは、内部で循環参照を検出したとき、復元ができるようにタグ付けを行い、参照を削除する仕組みです。

オブジェクトを復元したい場合は以下のようにencycleを使います。

コード
const{decycle,encycle}=require('json-cyclic');consta={a1:"test"};a.aa=a;constjson=JSON.stringify(decycle(a));constobj=JSON.parse(json);constb=encycle(obj);console.log(b);console.log(b.aa.aa.aa.a1);
実行結果
{ a1: 'test', aa: [Circular] }test

ちゃんと復元できることが確認できました。


Viewing all articles
Browse latest Browse all 8829

Trending Articles