2012-07-25 47 views
2

我是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

回答

7

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

這裏是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

9

你有散列的數組。

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