0

我有 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"}]}

谢谢,感谢您的帮助-我已经到处寻找如何做到这一点,而我现在只是把头撞在墙上。谢谢!

4

1 回答 1

2

\注意转储输出中的额外内容。

'Apps' => [
                \{
                    'name' => '1'
                  },

这是因为它们是对哈希引用的引用。问题代码在这里:

for (@apps) {
    my $app = { 'name' => $_ };
    push (@jsonapps, \$app);
}

$app已经是 hashref,因为您使用大括号并将其分配给标量。但是\,当您将其推送到前面时添加前面@jsonapps意味着您正在推送对 hashref 的引用。您不需要将其作为参考,因为它已经是参考。你只需要省略\.

for (@apps) {
    my $app = { 'name' => $_ };
    push (@jsonapps, $app);
}
于 2013-11-13T04:34:43.760 回答