2016-11-28 47 views
0

我有以下操作的代碼:的Perl - 從JSON到對象/散列

#!/usr/intel/bin/perl 

use strict; 
use warnings; 

use JSON::XS; 

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

my $arrayref = decode_json $json; 

for my $array(@$arrayref){ 
     for my $key (keys(%$array)){ 
       my $val = $array->{$key}; 
       print "$key: $val\n"; 
     } 

} 

當我編譯它,它打印我的錯誤「一點也不generator.pl線12的數組引用」。

我想解析JSON到一個對象,並根據具有屬性的對象獲取數據。我該怎麼做?

我希望在解析之後,我可以用它來比較字符串,打印,循環等等。

+0

這是一個hashref。你可以通過'ref'內建來發現。或者通過多個模塊中的一個來打印整個事物,以處理複雜的數據結構,例如'Data :: Dumper'。 – zdim

+0

我不知道它會返回什麼,因爲有多個值和屬性,所以我期望它以數組形式出現,所以我可能會以array [0] .Year,array [1] .Quarter形式打印...類似的東西,或者如果不是,我怎樣才能使用散列值? – helloworld1234

+0

@zdim我怎麼能使用它? – helloworld1234

回答

2

沒有陣列那裏;它是哈希散列。

my $hashref = decode_json $json; 

for my $object_name (sort keys %$hashref){ 
     print "In $object_name:\n"; 
     for my $key (sort keys %{ $hashref->{$object_name} }){ 
       my $val = $hashref->{$object_name}{$key}; 
       print "$key: $val\n"; 
     } 
} 
4

它不是數組引用,它是散列引用:

#!/usr/intel/bin/perl 

use strict; 
use warnings; 

use JSON::XS; 
use Data::Dumper; 

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

my $arrayref = decode_json $json; 

print Data::Dumper->Dump([$arrayref], [qw(arrayref)]); 

和輸出:

$arrayref = { 
       'Object2' => { 
          'Quarter' => 'Q4', 
          'Year' => '2012', 
          'Amount' => 500, 
          'DataType' => 'Other 2', 
          'Environment' => 'MIKE' 
          }, 
       'Object1' => { 
          'Amount' => 125, 
          'DataType' => 'Other 3', 
          'Year' => '2012', 
          'Environment' => 'STEVE', 
          'Quarter' => 'Q3' 
          } 
      };