我需要以某种格式从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 = ?
}
感谢您的帮助。
答案 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