使用Perl循环JSON

时间:2012-07-25 02:41:32

标签: json perl

我是Perl的新手,想要遍历这个JSON数据并将其打印到屏幕上。

我该怎么做?

$arr = '[{"Year":"2012","Quarter":"Q3","DataType":"Other 3","Environment":"STEVE","Amount":125},{"Year":"2012","Quarter":"Q4","DataType":"Other 2","Environment":"MIKE","Amount":500}]';

3 个答案:

答案 0 :(得分:11)

使用JSONJSON::XS将JSON解码为Perl结构。

简单示例:

use strict;
use warnings;

use JSON::XS;

my $json = '[{"Year":"2012","Quarter":"Q3","DataType":"Other 3","Environment":"STEVE","Amount":125},{"Year":"2012","Quarter":"Q4","DataType":"Other 2","Environment":"MIKE","Amount":500}]';

my $arrayref = decode_json $json;

foreach my $item( @$arrayref ) { 
    # fields are in $item->{Year}, $item->{Quarter}, etc.
}

答案 1 :(得分:10)

你有一系列哈希。

use JSON::XS qw( decode_json );

my $records = decode_json($json_text);
for my $record (@$records) {
   for my $key (keys(%$record)) {
      my $val = $record->{$key};
      say "$key: $val";
    }
}

JSON::XS

答案 2 :(得分:1)

这是CPAN上的一个应该可以解决问题的软件包JSON.pm

解析后,您可以将其视为任何其他Perl引用。

示例

$perl_scalar = $json->decode($json_text)

<强>文档

  

与encode相反:需要一个JSON文本并尝试解析它,   返回结果简单的标量或引用。犯错误。

     

JSON数字和字符串变成简单的Perl标量。 JSON数组成为Perl arrayrefs ,JSON对象成为Perl hashrefs。真正   变为1(JSON :: true),false变为0(JSON :: false),null变为   undef.`

类似的堆栈溢出问题: Parsing an array encoded in JSON