使用Perl循环播放JSON

问题描述:

我是Perl的新手,希望循环播放此JSON数据并将其打印到屏幕上。使用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}]'; 
+0

如果你想让它在Perl,那么为什么JavaScript代码? – 2012-07-25 02:42:17

+0

对不起 - 我的错误 - – Mike 2012-07-25 02:45:39

+2

在计算机科学中,我们一直在寻找更一般的解决方案来解决问题,这通常需要从更一般的角度来看问题。您所遇到的具体问题是不知道如何解析JSON,具体解决方案在您接受的答案中提供。但更普遍的问题是不知道在哪里可以找到Perl工具。更一般的解决方案是熟悉CPAN搜索网站,例如https://metacpan.org/ – DavidO 2012-07-25 06:06:50

使用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. 
} 

这里是CPAN一个包,应该做的伎俩,JSON.pm

一旦你解析它,你可以把它像任何其他的Perl引用。

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

文档

编码的相反:期望一个JSON文本并试图解析它, 返回结果简单的标量或参考。错误的Croaks。

JSON数字和字符串变成简单的Perl标量。 JSON数组成为Perl数组引用,JSON对象成为Perl hashrefs。真正 变为1(JSON ::真),假变为0(JSON :: FALSE)和空变 undef.`

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

你有散列的数组。

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