JSON::Syckの話
普通が一番。普通って難しい。普通って何だろう。
といった感じで普通にプログラム書いてたら以下のエラーに遭遇。
結構頻発しそうな気がするのでメモっときます。
まずエラーの内容
Dumping circular structures is not supported with JSON::Syck
と出まして何かわかりそうでわからん。
ので、屈辱感と共にYahoo!翻訳さんに聞いてみると
循環構造を投げおろすことは、JSONで支えられません。:Syck
との事でした。シック。
何となくわかった
つまり普通に書くと↓。うまく行くパターン。
#!/usr/local/bin/perl -l use strict; use JSON::Syck; my %json = ( hoge1 => { foo => 1 }, hoge2 => { foo => 1 }, ); print JSON::Syck::Dump(\%json);
{"hoge2":{"foo":1},"hoge1":{"foo":1}}
と普通に出力されます。
しかし、↓となると話が別。よくないパターン。
#!/usr/local/bin/perl -l use strict; use JSON::Syck; my $val = { foo => 1 }; my %json = ( hoge1 => $val, hoge2 => $val, ); print JSON::Syck::Dump(\%json);
ご想像通り。
Dumping circular structures is not supported with JSON::Syck
つまり、循環構造を投げおろすことは、JSONで支えられません。という事でした。シック。
やるなら一旦コピーしましょう。
my $val = { foo => 1 }; my %json = ( hoge1 => {%$val}, hoge2 => {%$val}, );
結構やってしまいそうじゃないですか??