如何从这个嵌套数组中检索数据?

时间:2015-07-20 14:00:47

标签: json perl

我很难从嵌套数组中检索数据。将HTTP :: Response转换为JSON的结果导致以下Dumper结果:

$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);

1 个答案:

答案 0 :(得分: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"; 
相关问题