将输出数据的哈希写入JSON

时间:2016-11-03 21:47:25

标签: json perl

我需要以某种格式从perl程序输出JSON。问题在于涉及到一个循环。 这是格式:

{"data":[
  {
    "data_point":"1"
  }
  {
    "data_point":"2"
  }
]} 

这没有循环:

$data = {"data" => [{"data_point" => "1"}, {"data_point" => "2"}]};
open my $fh, ">", "data.json";
print $fh encode_json($data);
close $fh;

如何让它在循环中运行?

@list = (1,2);
foreach $number (@list) {
  $data = ?
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你需要一个hashref,唯一的键值是一个arrayref,包含hashrefs作为元素。

my @list = (1..2);

my $data->{data} = [ map { { data_point => $_ } } @list ];

use Data::Dumper;
print Dumper $data;

map构建hashrefs { data_point => $_ }列表,由[ ]生成一个arrayref,然后将其指定为键data的值。

我们可以通过''运算符的礼貌省略=>键,因为它的左侧参数被视为引用。因此data'data'的工作方式相同。请参阅Comma operator in perlop

这会让您问,使用Data::Dumper检查什么。对于更多的键而不仅仅是'data',您可以将该行放在一个循环中,对于不同的数据描述字符串,可以使用map内的子句。

答案 1 :(得分:0)

从列表中创建哈希数组(1)。然后将该数组放入另一个哈希(2):

my @list =  ( 1..2 );
my @data;
push @data, { data_point => $_ }   for( @list );  # (1)

my $result =  { data => \@data };                 # (2)

哈希可能只包含标量值,但不能包含数组。所以我们存储了数组的引用:\@data