生成具有相同键名的哈希的json - perl

时间:2014-04-14 20:05:25

标签: json perl

我的目标是生成以下json:

{
     "nervous" : {
         { "id" : 1 },
         { "id" : 2 },
         { "id" : 3}
      }
}

我知道哈希不会多次接受同名的密钥,但是有没有办法生成上面的json?目前我正在做以下事情:

use JSON;

sub json_test {

    my %moods;
    $moods{'happy'} = "am happy";
    $moods{'excited'} = "am excited";
    $moods{'nervous'}{'id'} = 2;
    $moods{'nervous'}{'id'} = 3;
    $moods{'nervous'}{'id'} = 4;

    return to_json( \%moods, {utf8 => 1, pretty => 1});
}

my $return = json_test();
print $return;

我很确定它是有效的json数据,因为每个id都在它自己的对象中。有人可以建议,我对Perl完全不熟悉(但我很高兴能够学习它)

1 个答案:

答案 0 :(得分:6)

您的JSON无效。对象{…}需要键值对。您可能希望改为使用数组[…]

{
     "nervous" : [
         { "id" : 1 },
         { "id" : 2 },
         { "id" : 3}
      ]
}

可以由Perl代码生成

my $moods = {
     nervous => [
         { id => 1 },
         { id => 2 },
         { id => 3}
      ]
};

to_json($moods, { ut8 =>1, pretty => 1 });

my %moods;
$moods{'happy'} = "am happy";
$moods{'excited'} = "am excited";
push @{ $moods{nervous} }, { id => 2 };
push @{ $moods{nervous} }, { id => 3 };
push @{ $moods{nervous} }, { id => 4 };