我想通过ID显示数组块 - 我可以使用Template Toolkit执行此操作还是将它放在Perl控制器端? (我正在使用Dancer& REST :: Client来获取JSON)
这是JSON:
{
"user":
[
{
"id": 12345,
"name": bob,
"age": 22,
"birth_place": "London"
},
{
"id": 12346,
"name": amy,
"age": 20,
"birth_place": "London"
}
]
}
我在控制器中获取用户的ID,因此我可以使用[% user.id %]
在模板中显示ID。所以我希望能够基本上做到
1)如果用户id匹配JSON中其中一个id的id
2)显示该块的数据
Name: [% content.name %]
Age: [% content.age %]
Birth Place: [% content.birth_place %]
有任何帮助吗? :)
答案 0 :(得分:1)
我不打算给你一个完整的解决方案,因为它很长很复杂,而且你没有提供足够的细节来让它在第一时间成为可能。
但是,您可以像这样解码JSON:
use strict;
use warnings;
use JSON;
my $JSON_text = '{
"user":
[
{
"id": 12345,
"name": "bob",
"age": "22",
"birth_place": "London"
},
{
"id": 12346,
"name": "amy",
"age": "20",
"birth_place": "London"
}
]
}';
my $JSON = decode_json ( $JSON_text );
foreach my $element ( @{$JSON->{"user"}} ) {
print $element->{"id"}, "\n";
}
我将留给您试图弄清楚如何将您想要的字段提取到模板中。顺便说一句 - 你发布的JSON无效,所以我不得不稍微修改它。希望这是你的来源的换位错误。
答案 1 :(得分:1)
如果你需要检查多个用户,你真的想要一个哈希而不是一个数组。
my $data = decode_json(...);
my %data_by_userid = map { $_->{id} => $_ } @{ $data->{user} };
模板参数:
data_by_userid => \%data_by_userid
然后,您使用
[% user = data_by_userid.$id -%]
[% IF user -%]
Name: [% user.name %]
Age: [% user.age %]
Birth Place: [% user.birth_place %]
[% END -%]
如果模板中只需要一个用户,请使用
my $data = decode_json(...);
my ($user) = grep { $_->{id} == $id } @{ $data->{user} };
模板参数:
user => $user
然后,您使用
[% IF user -%]
Name: [% user.name %]
Age: [% user.age %]
Birth Place: [% user.birth_place %]
[% END -%]