PerでJSON (JSON::XS)

PerlでJSON文字列へアクセス! そう、それだけ。

今回使ったのは、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であれば問題ないかもしれませんが、他言語のパーサーで型判定までやってオブジェクト型で返すようなものがある場合問題があるかもしれません。
何かオプションがあったかな。


カテゴリ

Amazon

アクセスランキング

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

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

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm