【问题标题】:How to convert perl hash to javascript hash如何将 perl 哈希转换为 javascript 哈希
【发布时间】:2012-11-11 19:55:56
【问题描述】:

我在template toolkit 框架中工作。我的 tt 文件中有一个 perl 哈希数据类型。我想将此哈希数据类型转换为 javascript 哈希数据类型。

代码: 模板:

        [% PERL %]
        use JSON qw(encode_json);

        my $vars = {

            'version'  => 3.14,
            'days'     => [ qw( mon tue wed thu fri sat sun ) ],
            'cgi'      => CGI->new(),
            'me'       => {
                'id'     => 'abw',
                'name'   => 'Andy Wardley',
            },
        };

        my $json = encode_json($vars->{'me'});
    [% END %]


 <script>
   function callme(){
   var me = [% $json %]
  }
</script>

现在我希望可以在 javascript 中访问 me 哈希

【问题讨论】:

  • 这个问题很有趣,但没有代码是不可能回答的。
  • Perl: my $vars = { 'version' => 3.14, 'days' => [ qw( mon tue wed thu fri sat sun ) ], 'cgi' => CGI->new( ), '我' => { 'id' => 'abw', 'name' => '安迪·沃德利', }, };模板:电子邮件 [% me.name %]

    这是版本 [% version %]

    ID:[% me.id %] 名称:[% me.name %] 现在我希望可以在 javascript 中访问 me 哈希
  • @Kalai 编辑您的问题并添加它(使用代码格式),而不是像在评论中那样添加它。因为它是评论,所以很难阅读,也更容易错过。
  • edit您的问题。
  • @simbabque : 我稍微修改了代码...

标签: javascript perl template-toolkit


【解决方案1】:

有几个 TT 插件可以做到这一点,其中任何一个都是比将原始 perl 嵌入到模板中更好的解决方案。就个人而言,我更喜欢JSON::Escape,但还有其他一些。在每天或多或少地编写 TT 的 5 年多的时间里,我从未不得不求助于使用 [% PERL %] 指令。我想我不是在写 CGI。 YMMV。

[%- USE JSON.Escape( pretty => 1 );
    SET me = { id => 'abw', name => 'Andy Wardley' };
...
-%]

<script>
    function callme() {
    var me = [% me.json %]
    ...
</script>

【讨论】:

    【解决方案2】:

    尝试使用来自 CPAN 的 JSON。它是JavaScript Simple Object Notation,您可以直接在 JavaScript 中使用它。

    use JSON qw(encode_json);
    
    my $vars = {
    
        'version'  => 3.14,
        'days'     => [ qw( mon tue wed thu fri sat sun ) ],
        'cgi'      => CGI->new(),
        'me'       => {
            'id'     => 'abw',
            'name'   => 'Andy Wardley',
        },
    };
    print encode_json($vars->{'me'});
    

    输出:

    {"name":"Andy Wardley","id":"abw}
    

    【讨论】:

    • 如果你已经 used 了,你应该可以在你的 tt 中说 JSON::encode_json
    • 它会抛出以下错误,一旦我将此代码放入我的 tt 文件“encode_json”不是由 JSON 模块导出
    • @Kalai 我不熟悉 TT。请改用requireJSON::encode_json()use 在编译时处理。模板中可能有问题。此外,请不要更改您的问题以反映您在发布答案后所做的事情。坚持使用cmets。这让人们很难跟上。
    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 2017-01-06
    • 2019-10-27
    • 2019-05-23
    • 2015-11-26
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多