2015-09-28 64 views
3

我需要循環通過幾個jsons並打印出索引的每個的1場...循環通過JSON數據和打印出使用Perl(不是哈希REF)

我開始用含有我的JSON一個生成的字符串數據。然後我解碼串並轉儲它顯示正是我的工作:

my $decoded = decode_json $string 
print Dumper $string 

這將導致以下的輸出:

$VAR1 = [ 
     { 
     'hdr' => [ 
        1, 
        'acknowledged', 
        '', 
        '/home/clanier/dev/test/sds-test/data/JPLIDR2015169.64575', 
        '2015/271-19:10:39.0101355', 
        '2015/271-19:10:39.2599252', 
        '' 
       ] 
     }, 
     { 
     'hdr' => [ 
        2, 
        'acknowledged', 
        '', 
        '/home/clanier/dev/test/sds-test/data/JPLIDR2015169.64575', 
        '2015/271-19:10:39.3928414', 
        '2015/271-19:10:39.6397269', 
        '' 
       ] 
     }, 
     { 
     'hdr' => [ 
        3, 
        'acknowledged', 
        '', 
        '/home/clanier/dev/test/sds-test/data/JPLIDR2015169.64575', 
        '2015/271-19:10:39.7726375', 
        '2015/271-19:10:40.0162758', 
        '' 
       ] 
     } 
    ]; 

現在我嘗試遍歷這個和打印字承認爲每一個:

foreach my $hdr ($decoded->{hdr}) { 
    print $hdr->[1]; 
} 

我看着this solution尋求幫助,但它似乎我甚至不能得到儘可能原來的海報,因爲「不是一個散列引用」錯誤。我能事先打印指定的一個,但我通過需要循環並打印所有的人。這對於該代碼:print $$decoded[0]->{'hdr'}->[1];

回答

11

$decoded是一個數組引用,而不是一個散列引用。你不能解引用它作爲一個哈希:->{

你可以解引用它作爲一個陣列,雖然:

for my $hdr (@$decoded) { 
    print $hdr->{hdr}[1]; 
} 

約在Perl引用的更多信息,請參閱perlreftut