2015-07-20 55 views
0

我很難從嵌套數組中檢索數據。在下面的自卸車結果的HTTP響應::轉換成JSON結果的結果:如何從這個嵌套數組中檢索數據?

$VAR1 = [ 
      'FE93DEC4505772CE9CFCE353A1F07027A165032F', 
      [ 
      [ 
       'myshow.S01E03.HDTV.x264-ASAP.mp4', 
       192494228, 
       192494228, 
       2, 
       0, 
       735, 
       bless(do{\(my $o = 1)}, 'JSON::PP::Boolean'), 
       0, 
       0, 
       0, 
       0, 
       -1, 
       0 
      ], 
      [ 
       'Downloaded.txt', 
       172, 
       172, 
       2, 
       734, 
       1, 
       bless(do{\(my $o = 0)}, 'JSON::PP::Boolean'), 
       -1, 
       -1, 
       -1, 
       -1, 
       -1, 
       0 
      ], 
      [ 
       'myshow.s01e03.hdtv.x264-asap.nfo', 
       4798, 
       4798, 
       2, 
       734, 
       1, 
       $VAR1->[1][1][6], 
       -1, 
       -1, 
       -1, 
       -1, 
       -1, 
       0 
      ] 
      ] 
     ]; 

我想打印出清單:

myshow.S01E03.HDTV.x264-ASAP.mp4 
Downloaded.txt 
myshow.s01e03.hdtv.x264-asap.nfo 

並同時獲得「FE93DEC4505772CE9CFCE353A1F07027A165032F」到字符串變量。 我很難搞清楚什麼可以做到這一點。

我的代碼高達這一點:

my $response = $ua->get($url, @ns_headers); 
my $content = from_json $response->decoded_content; 
my @files=$content->{files}; 
print Dumper(@files); 
+4

解析表示從數據格式轉換爲內存數據結構。你已經成功解析它。你似乎缺乏關於如何處理數組和引用的知識。你有嘗試過什麼嗎? http://perldoc.perl.org/perldata.html和http://perldoc.perl.org/perlref.html是一個很好的出發點。 – Quentin

+0

我不知道這是否一定是公平的 - 一個簡單的數組數組並不難解析,但事實並非如此。它是一個包含一些數組引用的數組,有些不是,這比基本情況要複雜得多。 – Sobrique

+1

這與您[上一個問題]中的數據不同(http://stackoverflow.com/questions/31492440/parsing-this-kind-of-data)。你使用不同的API? – Borodin

回答

3

[]表示在Perl的陣列。這是一個3深的陣列。所以你需要迭代它,提取值。

foreach my $element (@files) { 
    if (ref $element eq "ARRAY") { 
     foreach my $subelement (@$element) { 
      print $subelement->[0],"\n"; 
     } 
    } 
    else { 
     print $element,"\n"; 
    } 

} 

該過程是複雜的一點通過是數組的數組 - 它實際上是相當混亂的數據結構。所以你需要使用像ref這樣的東西來告訴你現在是看數組還是文本元素。

這裏要知道的一個有用的技巧是 - 如果你有一個數組,你可以通過$array[0]訪問一個值。如果你有一個數組引用,你可以使用->,它首先解引用數組。

E.g.

my @array = qw (fish); 
my $ref_to_array = \@array; 
print $ref_to_array,"\n"; 
print $ref_to_array -> [0],"\n"; 
+1

感謝您使用實際的代碼進行解釋!我不熟悉這種嵌套結構。 – Droidzone

+0

我不得不再深入一層才能獲取數據。我向代碼提交了一個編輯。 – Droidzone

+1

@Droidzone Sobrique的代碼適用於您在問題中發佈的數據,因此您提出的修改並不合理。如果答案中的代碼與問題中的數據不一致,未來訪問此帖的訪問者可能會感到困惑。 – ThisSuitIsBlackNot