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)でしか動作出来ないのだけれど間違ってアップデートしてしまった時のためにメモ