我有Dumper正确输出数据:
'Apps' => [
\{
'name' => '1'
},
\{
'name' => '2'
},
\{
'name' => '3'
},
\{
'name' => '4'
},
\{
'name' => '5'
},
\{
'name' => '6'
},
\{
'name' => '7'
}
],
'code' => 'SUCCESS'
};
但是当我将其转换为JSON时,我遇到了很多问题:
my @jsonapps;
my @apps = map { $_ } keys %glob;
my %hash;
$hash{'code'} = 'SUCCESS';
for (@apps) {
my $app = { 'name' => $_ };
push (@jsonapps, \$app);
}
# $hash{'Apps'} = \@jsonapps;
my $jsonfinal = encode_json \%hash;
print $jsonfinal;
当我尝试在:
中添加一个哈希数组时,它肯定要做$hash{'Apps'} = \@jsonapps;
但是我这样做有问题,因为所有哈希都有相同的键“名称”。我需要输出看起来像:
{"code":"SUCCESS","Apps":[{"name":"1"},{"name":"2"},{"name":"3"},{"name":"4"},{"name":"5"},{"name":"6"},{"name":"7"}]}
谢谢,我感谢你们的帮助 - 我到处搜寻了解如何做到这一点,而我现在只是撞到了墙上。谢谢!
答案 0 :(得分:2)
注意转储输出中的额外\
。
'Apps' => [
\{
'name' => '1'
},
这是因为它们是对哈希引用的引用。问题代码在这里:
for (@apps) {
my $app = { 'name' => $_ };
push (@jsonapps, \$app);
}
$app
已经是hashref,因为您使用大括号并将其指定给标量。但是当您将\
推到@jsonapps
时,在前面添加\
意味着您正在推送对hashref的引用。您不需要将其作为参考,因为它已经是参考。您只需要省略for (@apps) {
my $app = { 'name' => $_ };
push (@jsonapps, $app);
}
即可。
{{1}}