在perl中创建JSON

时间:2014-07-18 09:02:22

标签: json perl

使用这段代码,我只是一个接一个地列出值名称和扩展名的数组,如何为我正在创建的每个哈希获得单独的{name:"tom", extension:"012345"}?即我想要[{name:"tom", extension:"012345"}, {name:"tim", extension:"66666"}]

#!/usr/bin/perl
use strict;
use warnings;
use lib $ENV{HOME} . '/perl/lib/perl5';
use lib '/home/accounts/lib';

use Data::Dump qw(dump);
use Lib::Phonebook;
use JSON;

my $ldap = Lib::Phonebook->new();
my (@names, @numbers, $count, $name_number_count, @result);

@names             = $ldap->list_telephone_account_names();
@numbers           = $ldap->list_telephone_account_numbers();
$name_number_count = @names;
$count = 0;

for $count (0 .. $name_number_count - 1) {
    my %hash = ( "name" => $names[$count], "extension" => $numbers[$count] );
    push( @result, %hash );
}

my $json = encode_json \@result;
print dump $json;

1 个答案:

答案 0 :(得分:3)

而不是

push( @result, %hash );

做的:

push( @result, \%hash );

原始语句将整个哈希值复制到列表中(因为您发现它变为键,值,键,值等),而添加反斜杠则会引用对哈希的引用(不复制任何其他内容)并序列化所有JSON都创建了一个嵌套结构。