PerでJSON その2(JSONとJSON::XS)

CentOS7をVMWareで入れる機会があったので、前回試したJSONもついでに動かしてみようということで試してみたところ動くには動いたが混乱中。Perl難しい。

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を併用するのがいいってことかな。
(まだ良くわかってない)


カテゴリ

Amazon

アクセスランキング

[ジャンルランキング]
コンピュータ
249位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
38位
アクセスランキングを見る>>

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm