PerlでJSONを扱うための覚え書きです。JSONモジュールを使います。
use strict;
use utf8;
use Encode;
use JSON;
print "content-type: text/plain; charset=utf8\n\n";
# ハッシュリファレンス
my $hash_ref = { 'key1' => '値1', 'key2' => '値2', 'key3' => '値3', 'key4' => '値4' };
my $hash_ref2json = decode('utf-8', encode_json( $hash_ref )); # JSON文字列に変換
print "ハッシュリファレンスをJSONに変換\n";
print "$hash_ref2json\n\n";
# 配列リファレンス
my $array_ref = [ {'key1' => '値1'}, {'key2' => '値2'}, {'key3' => '値3'}, {'key4' => '値4'} ];
my $array_ref2json = decode('utf-8', encode_json( $array_ref )); # JSON文字列に変換
print "配列リファレンスをJSONに変換\n";
print "$array_ref2json\n\n";
# JSON文字列
my $json_text = '{ "key1": "値1", "key2": "値2", "key3": "値3", "key4": "値4" }';
my $json2ref = decode_json( encode('utf-8', $json_text) ); # リファレンスに変換
print "JSON文字列をリファレンスに変換\n";
print "$json2ref";
exit();
use utf8
の元ではdecode_json()
に内部文字列を渡すとエラーになるので、Encodeモジュールのencode()
使ってエンコードしています。
結果
ハッシュリファレンスをJSONに変換 {"key3":"値3","key1":"値1","key2":"値2","key4":"値4"} 配列リファレンスをJSONに変換 [{"key1":"値1"},{"key2":"値2"},{"key3":"値3"},{"key4":"値4"}] JSON文字列をリファレンスに変換 HASH(0x7fd2b1920220)
安い共用サーバでCGIを軽快に動かす、なんて時にはテキストファイルにデータ保存したりするんですが、JSONだと他から参照しやすいファイルに書き出せて便利です。標準モジュールではないですが、使える共用サーバも結構あるようです。あと、XSで書かれたJSON::XSというのもあります。使ったことないですが、高速化が図られているものと思われます。
JSON: JSON - JSON (JavaScript Object Notation) encoder_decoder - metacpan.orgPerlのXSについて: perlxs - XS 言語リファレンスマニュアル - perldoc.jp