PerでJSON その2(JSONとJSON::XS)
- Thu
- 09:53
- perl
CentOS7をVMWareで入れる機会があったので、前回試したJSONもついでに動かしてみようということで試してみたところ動くには動いたが混乱中。Perl難しい。
実行結果
実行結果は変わらないが、pathはともかく、パッケージの指定を変更しないといけないのが良くわからない。確かに、JSON自体は下記にインストールされている。
[Perl] JSON モジュールの utf8 フラグ周りの仕様 tips 注意点 Kawanet Blog II/ウェブリブログ
2008年の記事ということで、perl使いの方にとっては知ってて当然のことのようです・・・。
と、いうことでJSON::XSを入れなおして確認。
と、いうことでJSONを扱う場合は、EncodeをJSON::XSを併用するのがいいってことかな。
(まだ良くわかってない)
perl-JSONのインストール
$ sudo yum install perl-Time-HiRes $ sudo yum install perl-local-lib $ sudo yum install perl-CPAN $ sudo cpan JSONこれで一応JSONパーサが動くようにはなる。
Perlソースの修正
json1.plをコピーしてjson2.plを作成。変更点はperlへのpathとuse JSON::XS;部分。01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: | #!/usr/bin/perl use JSON; 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"; |
実行結果
[user01@localhost perl]$ ./json2.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"}
実行結果は変わらないが、pathはともかく、パッケージの指定を変更しないといけないのが良くわからない。確かに、JSON自体は下記にインストールされている。
[user01@localhost JSON]$ cd /usr/local/share/perl5 [user01@localhost perl5]$ l 合計 80 drwxr-xr-x. 4 root root 54 5月 4 09:53 . drwxr-xr-x. 6 root root 58 5月 4 09:53 .. drwxr-xr-x. 3 root root 43 5月 4 09:53 JSON -r--r--r--. 1 root root 70496 10月 31 2013 JSON.pmと思ったらJSONとJSON::XSではUTF-8周りの挙動が違うようで日本語等を扱う場合に注意が必要な様子。
[Perl] JSON モジュールの utf8 フラグ周りの仕様 tips 注意点 Kawanet Blog II/ウェブリブログ
2008年の記事ということで、perl使いの方にとっては知ってて当然のことのようです・・・。
と、いうことでJSON::XSを入れなおして確認。
JSON::XSのインストール
JSON::XSを入れるにはCanary::Stabilityが必要なようなのでまずそれから。$ sudo cpan Canary::Stability $ sudo cpan JSON::XS ・・・ Files found in blib/arch: installing files in blib/lib into architecture dependent library tree Installing /usr/local/lib64/perl5/auto/JSON/XS/XS.so Installing /usr/local/lib64/perl5/auto/JSON/XS/XS.bs Installing /usr/local/lib64/perl5/JSON/XS.pm Installing /usr/local/lib64/perl5/JSON/XS/Boolean.pm Installing /usr/local/share/man/man1/json_xs.1 Installing /usr/local/share/man/man3/JSON::XS::Boolean.3pm Installing /usr/local/share/man/man3/JSON::XS.3pm Installing /usr/local/bin/json_xs Appending installation info to /usr/lib64/perl5/perllocal.pod MLEHMANN/JSON-XS-3.02.tar.gz /bin/make install -- OKとりあえず入った模様。
[user01@localhost ~]$ l /usr/local/lib64/perl5/JSON 合計 68 drwxr-xr-x. 3 root root 27 5月 5 09:45 . drwxr-xr-x. 5 root root 41 5月 5 09:45 .. drwxr-xr-x. 2 root root 23 5月 5 09:45 XS -r--r--r--. 1 root root 67277 2月 27 06:46 XS.pm無事、以前のJSON::XSバージョンのjson1.plも動いたということでめでたしめでたし(?)。
と、いうことでJSONを扱う場合は、EncodeをJSON::XSを併用するのがいいってことかな。
(まだ良くわかってない)
- 関連記事
-
- Perlのforkで子プロセスの同時実行数を制限した並列処理
- PerでJSON その2(JSONとJSON::XS)
- PerでJSON (JSON::XS)
- Perlでgzipファイルの入出力(Compress::Zlibの利用)
- PerlでCSVファイルの入出力(Text::CSV_XSの利用)
Comment
Trackback
- URL
- https://nosource.blog.fc2.com/tb.php/148-97304186
- この記事にトラックバック(FC2Blog User)