模板工具包 - 按 ID 显示数组
Template Toolkit - Display array by ID
我想通过 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 匹配
2) 显示来自该块的数据
Name: [% content.name %]
Age: [% content.age %]
Birth Place: [% content.birth_place %]
有什么帮助吗? :)
我不会给你一个完整的解决方案,因为它又长又复杂,而且你没有提供足够的细节来让它成为可能。
但是,您可以像这样解码 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 无效,所以我不得不稍微修改一下。希望这是您源代码中的换位错误。
如果您需要检查多个用户,您确实需要散列而不是数组。
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 -%]
我想通过 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 匹配2) 显示来自该块的数据
Name: [% content.name %]
Age: [% content.age %]
Birth Place: [% content.birth_place %]
有什么帮助吗? :)
我不会给你一个完整的解决方案,因为它又长又复杂,而且你没有提供足够的细节来让它成为可能。
但是,您可以像这样解码 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 无效,所以我不得不稍微修改一下。希望这是您源代码中的换位错误。
如果您需要检查多个用户,您确实需要散列而不是数组。
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 -%]