我很难从嵌套数组中检索数据。将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);
答案 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";