我有以下代码:
my $decoded_json = decode_json($result);
print Dumper($decoded_json);
输出是这样的:
$VAR1 = {
'searchLogMessages' => [],
'startToken' => '',
'documents' => [
{
'status' => 'Open',
'inheritedLabels' => [],
'aliases' => [
{
'precedence' => '2013-07-31T07:37:14.071Z',
'id' => 'abc'
}
],
'title' => '[DE] Add Category Specific Example Tab',
}
],
'totalNumberFound' => 1
};
我想访问document->aliases->id
。
foreach my $issue (@{$decoded_json->{documents}}) {
my @aliases_arr = sort {$b->{precedence} cmp $a->{precedence}} $issue->{aliases};
print ref($issue->{aliases}), "\n"; #prints "ARRAY"
print $issue->{aliases}[0]->{id}, "\n"; #prints "abc"
print ref($aliases_arr[0]), "\n"; #prints "ARRAY"
}
为什么$aliases_arr[0]
属于数组类型。
答案 0 :(得分:4)
$issue->{aliases}
不是数组,而是数组引用。由于sort
需要一个列表(此处包含单个数组引用),因此您的代码不起作用且@aliases_arr
仅包含单个数组引用,这与$issue->{aliases}
相同。
你必须取消引用它:
my @aliases_arr = sort { $b->{precedence} cmp $a->{precedence} } @{$issue->{aliases}};
现在一切都应该工作了,print ref($aliases_arr[0])
给了HASH
。