【问题标题】:Template Toolkit - Display array by ID模板工具包 - 按 ID 显示数组
【发布时间】:2015-08-01 18:37:33
【问题描述】:

我想通过 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 %]

有什么帮助吗? :)

【问题讨论】:

    标签: json perl template-toolkit


    【解决方案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 无效,所以我不得不稍微修改一下。希望这是您的来源上的转置错误。

    【讨论】:

      【解决方案2】:

      如果您需要检查多个用户,您确实需要哈希而不是数组。

      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 -%]
      

      【讨论】:

        猜你喜欢
        • 2013-05-03
        • 1970-01-01
        • 2012-09-06
        • 2019-01-03
        • 1970-01-01
        • 2011-10-05
        • 2015-03-12
        • 2015-04-04
        • 2013-05-17
        相关资源
        最近更新 更多