使用Perl循环遍历JSON

5
我是一名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}]';

如果你想用Perl,那为什么要加JavaScript标签呢? - user1106925
2
在计算机科学中,我们总是寻找问题的更一般解决方案,这通常涉及从更一般的角度来看待问题。你现在面临的具体问题是不知道如何解析JSON,而具体的解决方案已经在你接受的答案中提供了。但更一般的问题是不知道在哪里找到Perl工具。更一般的解决方案是熟悉CPAN搜索网站,例如https://metacpan.org/。 - DavidO
3个回答

13

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

11

你有一个哈希数组。

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


1

这里有一个在CPAN上的包,应该可以解决问题,JSON.pm

一旦你解析它,你可以像对待任何其他Perl引用一样处理它。

示例

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

文档

解码的反义词:期望一个JSON文本并尝试解析它,返回结果为简单标量或引用。在错误时抛出异常。

JSON数字和字符串变成简单的Perl标量。JSON数组变成Perl数组引用,JSON对象变成Perl哈希引用。true变成1(JSON::true),false变成0(JSON::false),null变成undef。

类似的Stack Overflow问题: 解析编码为JSON的数组


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接