HOME備忘帳

perlのJSONモジュール

perlのJSONモジュールについてのメモです。

JSONモジュールはその名の通り、JSONデータのデコード・エンコードをしてくれます。レンタルサーバでも導入されてるケースが多いみたいです。

文字コードの処理は一緒にやってくれますし、文字コードは触らないで欲しい場合の関数もあります。

JSONを扱えるモジュールは他にもあります。個人的には最初に使って、特に問題なかったので使っているレベルです。もっとよいのあれば、お勧め教えてください。

基本の使い方

use JSONすると、関数が4つインポートされます。

utf8の文字コード処理を一緒にやってくれるencode_json, decode_json、文字コードは触らないto_json, from_jsonです。

use utf8;	# このスクリプトはutf8。
use JSON;	# 基本の4つの関数がインポートされる

# 例えば以下のハッシュリファレンスを
my $output_data = {
	number => 1,
	list => [10, 20, 30],
	text => '全角文字',
};

# JSON形式に。
my $json_text = encode_json( $output_data ) ;

# たとえばこんな感じでブラウザに返す?
print "Content-type: applecation/json; charset=utf-8\n\n$json_text";

# 受け取ったJSON形式のデータを
my $input_json = (どこかから取得);

# デコードしてハッシュに格納
my $data_ref = decode_json( $input_json );
my $num = $data_ref->{'number'};	# たとえば。

文字コード触らないパターン

最近のWEB関係はutf8多数派なので上記で良さそうなのですが、たまに文字コードを触ってもらいたくないことがあります。
あえてuse utf8しないことにしたとか、DBやファイルとのインターフェイスがアレだとか。

use JSON;
use Encode qw(from_to);

# perl的には単なるバイト列だと思っているデータ。
my $output_data = {
	number => 1,
	list => [10, 20, 30],
	text => '全角文字',
};

# JSONってutf8だよね?
foreach (%$output_data) {
	# このプログラムはEUCだった。
	from_to($_, 'eucjp', 'utf8');
}

# それをそのままJSONに。
my $json_text = to_json( $output_data );

泥臭いスキマ埋め作業も上手にやってくれるperlの健気さ万歳です。

最終更新日:2015/04/03

[ ページ先頭へ ]