【发布时间】:2012-04-10 23:40:00
【问题描述】:
我正在尝试将一些数据从 Perl 输出到 JSON。我可以做一个简单的输出,但想更好地构建它。
我有一个带有 id、开始时间和结束时间的数组。这是我用来输出的代码:
print header('application/json');
my $json->{$entry} = \@array;
my $json_text = to_json($json);
print $json_text;
返回:
{"Season":[["1","1330065300","1344038401"],["7","1298505601","1312416001"]]}
但我想输出更像:
{"Season":0[{"id":1,"DateStart":1330065300,"DateEnd":1344038401},{"id":7,"DateStart":1298505601,"DateEnd":1312416001}]}
谁能帮助我更好地构建我的输出结构?
---更新------
谢谢迈克尔。我已尝试实现您的示例。
这是目前的代码:
foreach my $key (keys %$seasons)
{
$seasons->{$key} =
[
map
{
{ id=>$_[0], DateStart=>$_[1], DateEnd=>$_[2] }
} @{$seasons->{$key}}
];
}
但它返回错误(参考 foreach 行):
Not a HASH reference at line 148
$seasons 是从 SQL fetchall_arrayref 返回的 arrayref
有什么线索吗?
【问题讨论】:
-
你能使用像search.cpan.org/~mlehmann/JSON-XS-2.32/XS.pm这样的CPAN库吗?
-
您说要返回的代码是无效的JSON。
0真的应该在那里吗? -
如果你想要 JSON 中的散列,那部分结构必须是 Perl 结构中的散列。
-
错误信息很好地解释了它——当你传递一个数组引用时,需要一个哈希引用。尝试将
foreach行替换为foreach my $key (keys @$seasons),并将出现的$seasons->{$key}替换为$seasons->[$key]。