JSON
JSONをエンコード/デコードする
use JSON;
use JSON::Types;
パッケージをロードする。JSON::Typesはエンコード時にのみ必要。
my $json =
encode_json($perl_scalar);
perlデータ構造をJSONにエンコードする。文字列入力は、(utf8フラグON/OFFに関わらず)utf8を想定している。ワイドキャラクタが混入していると
croakする。
出力は、utf8エンコードされたバイナリ文字列(つまりutf8フラグOFFの文字列)。
perlは、変数型と言う概念がほとんどない。JSONは、文字列, 数値, 真理値を区別するので、数値を文字列として出力("
"で囲って出力)してしまうと、デコード側のパースが厳密であるとデコードに失敗する。perl以外でデコードする場合は、JSON::Typesを併用して、下記の書式で
perlスカラーを作成する。
$perl_scalar = (
int => number $int,
strint => number $strint,
str => string $str
);
my
$perl_scalar = decode_json($json);
JSONを
perlデータ構造にデコードする。文字列入力は、utf8エンコードされたバイナリ文字列(つまりutf8フラグOFFの文字列)を想定している。utf8フラグONの文字列を入力すると
croakする。CGI から入力された文字列は、CGIパッケージが utf8フラグONの文字列を出力するので、事前に utf8::encode
しておく必要がある点に注意が必要である。
出力は、use utf8なら utf8フラグONの文字列になる。
上記の関数スタイルは簡便だが、下記のOOPスタイルを使うと更に細かな制御ができる。
my $json = JSON->new->utf8->encode($perl_scalar);
encode_json
と同じ。->utf8 の部分を下記のメソッドに置き換えてエンコード方法を制御できる。
my $perl_scalar = JSON->new->utf8->decode($json);
decode_jsonと同じ。->utf8 の部分を下記のメソッドに置き換えてデコード方法を制御できる。
$json = $json->ascii;
1を指定すると、0x00~0x7fの文字のみそのままエンコード/デコードする。それ以外の文字は、\uXXXX または \uHHHH\uLLLL
にエンコード/デコードする(RFC4627)。
$json = $json->latin1;
Latin1 (ISO-8859-1)
文字列としてエンコード/デコードする。0x00~0xffの文字がそのままエンコード/デコードされる。
$json = $json->utf8;
utf8文字列としてエンコード/デコードする。
$json = $json->pretty;
インデント/改行を入れて人間が見やすいJSONを出力する。デコード時は、改行/空白を無視するので使用する必要はない。
$json = $json->relaxed;
デコード時の文法解釈を緩くする。余分なカンマを無視する、コメントを無視する等。
コメント(#
コメント形式)入りのJSONをデコードする場合は必須。
$json = $json->boolean_values([$false, $true]) ;
JSON内の真理値を$false, $trueで指定した perlスカラー値にデコードする。
デフォルトでは、JSONパッケージ内の静的オブジェクト $JSON::false, $JSON::true にデコードされる。