PerでJSON (JSON::XS)
- Wed
- 00:34
- perl
PerlでJSON文字列へアクセス! そう、それだけ。
今回使ったのは、CPAN JSON::XS。
JSONの配列へのアクセスにやや悩みましたが、Object部分を@{}で配列へcast?っぽくすると通常の配列のようにアクセスできました。
通常通り、$json->{'data'}[0]、$json->{'data'}[1]でもアクセス可能。
json1.pl
実行結果
実行してみて分かったのですが、DUMPの結果がJSONのkey/valueにアクセスする前とした後で型が変わっています。
参照前:"data":[101,102,103,201,202,203]
参照後:"data":["101","102","103","201","202","203"]
参照してさらに何かしらのJSONに変換して出力するようなプログラムの場合、Perlであれば問題ないかもしれませんが、他言語のパーサーで型判定までやってオブジェクト型で返すようなものがある場合問題があるかもしれません。
何かオプションがあったかな。
今回使ったのは、CPAN JSON::XS。
JSONの配列へのアクセスにやや悩みましたが、Object部分を@{}で配列へcast?っぽくすると通常の配列のようにアクセスできました。
通常通り、$json->{'data'}[0]、$json->{'data'}[1]でもアクセス可能。
json1.pl
01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: | #!/usr/local/bin/perl -w use JSON::XS; use Data::Dumper; my $json_str = '{"key_str":"abcdefg" ,"key_int":987 ,"data":[101,102,103,201,202,203]}'; $json = decode_json($json_str); print "JSON=" . Dumper($json); print "[DUMP] " . encode_json($json) . "\n"; print "\nkey_str=" . $json->{'key_str'} . "\n"; print "\ndata cnt=" . @{$json->{'data'}} . "\n"; foreach my $val(@{$json->{'data'}}) { print " val=$val \n"; } print "\n[DUMP] " . encode_json($json) . "\n"; |
実行結果
$ ./json1.pl JSON=$VAR1 = { 'key_int' => 987, 'data' => [ 101, 102, 103, 201, 202, 203 ], 'key_str' => 'abcdefg' }; [DUMP] {"key_int":987,"data":[101,102,103,201,202,203],"key_str":"abcdefg"} key_str=abcdefg data cnt=6 val=101 val=102 val=103 val=201 val=202 val=203 [DUMP] {"key_int":987,"data":["101","102","103","201","202","203"],"key_str":"abcdefg"}
実行してみて分かったのですが、DUMPの結果がJSONのkey/valueにアクセスする前とした後で型が変わっています。
参照前:"data":[101,102,103,201,202,203]
参照後:"data":["101","102","103","201","202","203"]
参照してさらに何かしらのJSONに変換して出力するようなプログラムの場合、Perlであれば問題ないかもしれませんが、他言語のパーサーで型判定までやってオブジェクト型で返すようなものがある場合問題があるかもしれません。
何かオプションがあったかな。
- 関連記事
Comment
Trackback
- URL
- https://nosource.blog.fc2.com/tb.php/147-0875a42d
- この記事にトラックバック(FC2Blog User)