JSON.pmの使い方が変わっている件
サーバ側で全然問題なく動作していたJSON.pmが自分のMacBookで微妙なエラーを吐いて動作していなくて、ちゃんと調査したところJSON.pmがメジャーバージョンアップしてた
'objToJson' will be obsoleted. Please use 'to_json' instead. at ./_07202.cgi line 57 Can't locate object method "keysort" via package "JSON" at /Library/Perl/5.8.6/JSON.pm line 136.
objToJsonはto_jsonに書き換えてね、keysortってメソッドは無いよ的なメッセージが
JSON - JSON (JavaScript Object Notation) encoder/decoder - metacpan.orgを見ると、単純な形だと
#1.xx print objToJson($hoge); #2.xx print to_json($hoge);
でOKなのだけれども、デバック時に整形して見やすくしたりキー順に並べたりの場合はどうしたら?
- 整形して表示
#1.xx $JSON::Pretty = 1; print objToJson($hoge); #2.xx my $json = new JSON; $json->pretty; print $json->encode($hoge);
#インデントの幅とか:の前後の空白どうするって問題もあるけどpure-Perl版(JSON::PP)でしか設定出来ないので省略
- ハッシュキーで並び替える
#1.xx print objToJson($hoge, {keysort=>1}); #2.xx my $json = new JSON; print $json->canonical->encode($hoge);
実際サーバー側ではXS版(JSON::XS)では無くpure-Perl版(JSON::PP)でしか動作出来ないのだけれど間違ってアップデートしてしまった時のためにメモ