[英]Perl to JSON, with key/value pairs
我正在尝试 output 从 Perl 到 JSON 的一些数据。我可以做一个简单的 output,但想更好地构建它。
我有一个包含 ID、开始时间和结束时间的数组。 这是我用于 output 的代码:
print header('application/json');
my $json->{$entry} = \@array;
my $json_text = to_json($json);
print $json_text;
哪个返回:
{"Season":[["1","1330065300","1344038401"],["7","1298505601","1312416001"]]}
但我想 output 更像是:
{"Season":0[{"id":1,"DateStart":1330065300,"DateEnd":1344038401},{"id":7,"DateStart":1298505601,"DateEnd":1312416001}]}
谁能帮助我更好地构建我的 output?
- -更新 - - -
谢谢迈克尔。 我已尝试实施您的示例。
这是目前的代码:
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 返回的数组引用
有什么线索吗?
如果您想要 output 具有键/值对的对象数组而不是 arrays 的数组,那么首先将适当的数据放入to_json
。
即 hashrefs 数组而不是 arrayrefs 数组。
您可以使用map
来转换数据。
每当你尝试这样的事情时,总是检查 CPAN 看看是否有人以前做过,而不是试图重新发明轮子。 我找到了一个名为JSON的模块,它似乎完全符合您的要求。
该页面上有一个示例完全符合您的要求。 这是一个快速的解释:
use JSON; # imports encode_json, decode_json, to_json and from_json.
# simple and fast interfaces (expect/generate UTF-8)
my $utf8_encoded_json_text = encode_json \@array;
没有比这更容易的了。 最好的部分是,无论您的数组结构变得多么复杂,这都会起作用。
您基本上想要将 arrays 的数组转换为哈希数组,您可以使用map
来完成此操作。 假设$data
是您的结构,应该这样做:
for my $key (keys %$data) {
$data->{$key} = [
map {
{ id => $_->[0], DateStart => $_->[1], DateEnd => $_->[2] }
} @{$data->{$key}}
];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.