我试图以json格式打印出我已经获得的信息,我想如果我展示了我所拥有的那些将更好地解释一切。
foreach ...{
printer($versions);
}
sub printer
{
foreach ...{
my $results = id_cards();
my $toJsonResult = JSON::to_json($results);
print $toJsonResult;
}
}
sub id_cards
{
my $returnData = [];
for($x=1;$y < $vehicle->{'ROWS'};$x++ )
{
my $data;
$data->{year} = $vehicle->{$x}->{'YEAR'}; #there is more $data->repetativeness but not important to get the point
push(@$returnData,$data);
$y++
}
return $returnData;
}
打印的json:
[{"year":"2004"},{"year":"2004"}][{"year":"2002"},{"year":"2000"},{"year":"1994"}][{"year":"2004"},{"year":"1955"}][{"year":"2004"},{"year":"1955"}]
这非常接近我想要的但是没有json“对象”的分离? (不确定这个术语是什么)但它使它无效json。我可以做些什么来将年份相应地分组,但是在有效的json中。
答案 0 :(得分:2)
您正在循环中打印多个 JSON文本。每次循环时,都会打印一个新的JSON文本。
您应该在循环中构建数据结构,然后将整个事物转换为JSON。
e.g。
sub printer {
my @data;
foreach ...{
push(@data, id_cards());
}
print JSON::to_json(\@data);
}
答案 1 :(得分:1)
您已在id_cards
sub:
sub some_function {
my $return_array = [];
foreach (...) {
push(@$return_array, $some_result);
}
return $return_array;
}
在printer
中执行相同的操作:
sub printer {
my $return_array = [];
# for ...
return $return_array;
}
然后在文件顶部最外面的foreach
执行相同的操作:
my $results = [];
foreach (...) {
push(@$results,printer($versions));
}
print JSON.to_json($results);
仅在最后一刻打印一次。 JSON期望完全形成的数据结构。如果你没有给它一切,那么你不能指望它知道如何正确地格式化它。
当然,此时,函数printer
不会打印任何内容。所以它被误解了。我会将其名称更改为card_collection
或其他内容。
答案 2 :(得分:0)
您正在有效地执行以下操作:
my $result = [ { year => 2002 }, { year => 2003 } ];
my $toJsonResult = JSON::to_json($results);
print $toJsonResult; # [{"year":"2002"},{"year":2003"}]
my $result = [ { year => 2004 }, { year => 2005 } ];
my $toJsonResult = JSON::to_json($results);
print $toJsonResult; # [{"year":"2004"},{"year":2005"}]
my $result = [ { year => 2006 }, { year => 2007 } ];
my $toJsonResult = JSON::to_json($results);
print $toJsonResult; # [{"year":"2006"},{"year":2007"}]
为每个结果创建一个新的JSON文档,并在STDOUT上将它们全部绑定在一起。
您希望创建一个包含所有结果数组的文档,因此您需要将所有结果放在数组中。
my @results
my $result = [ { year => 2002 }, { year => 2003 } ];
push $results, $result;
my $result = [ { year => 2004 }, { year => 2005 } ];
push $results, $result;
my $result = [ { year => 2006 }, { year => 2007 } ];
push $results, $result;
my $toJsonResult = JSON::to_json(\@results);
print $toJsonResult; # [[{"year":"2002"},{"year":"2003"}],
# [{"year":"2004"},{"year":"2005"}],
# [{"year":"2006"},{"year":"2007"}]]