将perl数据转储器格式转换为JSON

时间:2013-11-13 03:17:42

标签: json perl

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

谢谢,我感谢你们的帮助 - 我到处搜寻了解如何做到这一点,而我现在只是撞到了墙上。谢谢!

1 个答案:

答案 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}}