Perl

PerlでJSONを使う

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.org
PerlのXSについて: perlxs - XS 言語リファレンスマニュアル - perldoc.jp