我是Perl的新手,我想将以下JSON解析为哈希数组,(首选map方法)
[
{ "name" : "Theodor Nelson",
"id": "_333301",
"address": "Hello_world"
},
{ "name": "Morton Heilig",
"id": "_13204",
"address": "Welcome"
}
]
然后只想打印“
名称
和
foreach循环中的ID
值。 任何形式的帮助将不胜感激。
答案 0 :(得分:0)
use JSON::XS qw( decode_json );
my $data = decode_json($json);
$template->process(..., { data => $data }, ...)
or die(...);
模板:
[% FOREACH rec IN data %]
[% rec.id %]: [% rec.name %]
[% END %]
答案 1 :(得分:0)
color : $index === 1 ? 'red' : 'green'
根据您的使用情况,错误处理显然是可选的。一次性或手动脚本可能会死,而生产级脚本应该有适当的错误处理。
JSON模块是JSON::PP和JSON::XS的包装器。它选择本地系统上可用的模块。 JSON :: XS更快,但可能没有安装。 JSON :: PP是纯Perl(没有外部C / C ++库),也是Perl核心的一部分。
代表您的顶级JSON数组的use JSON qw(from_json);
# The JSON module likes to die on errors
my $json_data = eval { return from_json($json); };
die "$@ while reading JSON" if $@; # Replace by your error handling
die "JSON top level is no array" unless ref($json_data) eq 'ARRAY'; # Replace by your error handling
for my $hashref (@{$json_data}) {
print $hashref->{name}."\n";
print $hashref->{id}."\n";
}
行dereferences the Array-reference。每个项目都应该是哈希引用。请点击链接以获取有关每个主题的更多信息。
答案 2 :(得分:0)
你可以简单地做
use JSON qw(encode_json decode_json);
my $JSON = [{ "name" : "Theodor Nelson",
"id": "_333301",
"address": "Hello_world },
{ "name": "Morton Heilig",
"id": "_13204",
"address": "Welcome"}]
my $decoded = decode_json $JSON;
return template 'yourtemplate', {
options => $decoded,
..,
..}
在视图文件中,您可以option.id
和option.name
或option.address
或FOREACH循环中的任何内容访问它。