如何将perl哈希转换为javascript哈希

如何将perl哈希转换为javascript哈希,javascript,perl,template-toolkit,Javascript,Perl,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 ) ],

我在框架中工作。我的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>
[%PERL%]
使用JSON qw(encode_JSON);
我的$vars={
“版本”=>3.14,
“天”=>[qw(周一周二周三周四周六周日)],
“cgi'=>cgi->new(),
“我”=>{
'id'=>'abw',
“name”=>“Andy Wardley”,
},
};
my$json=encode_json($vars->{'me'});
[%END%]
函数callme(){
var me=[%$json%]
}
现在我希望可以在javascript中访问me散列

请尝试使用CPAN。它非常简单,您可以直接在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}

有几个TT插件可以实现这一点,其中任何一个都比将原始perl嵌入模板更好。就我个人而言,我更喜欢,但还有一些其他的。在差不多每天编写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>
[%-使用JSON.Escape(pretty=>1);
SET me={id=>'abw',name=>'Andy Wardley'};
...
-%]
函数callme(){
var me=[%me.json%]
...

这个问题很有趣,但是没有代码是不可能回答的。Perl:my$vars={'version'=>3.14,'days'=>[qw(周一周二周三周四周六周日)],'cgi'=>cgi->new(),'me'=>{'id'=>'abw','name'=>'Andy Wardley',};模板:这是版本[%version%]

Id:[%me.Id%]Name:[%me.Name%]现在我希望可以在中访问me哈希javascript@Kalai编辑您的问题并添加(带有代码格式)与其在注释中那样添加它,不如在注释中添加它。这很难阅读,也很容易错过,因为它是一条注释。请回答您的问题。@simbabque:我对代码做了一点修改……如果您使用了
它,您应该能够在tt中说
JSON::encode_JSON
。一旦我将此代码放入tt文件,它就会抛出以下错误“encode_json”不是由json导出的module@Kalai我不熟悉TT。请尝试
require
JSON::encode_JSON()
使用
是在编译时处理的。模板中可能有问题。此外,请不要更改您的问题以反映您在发布答案后所做的事情。只需坚持评论。这会使人们难以理解。