【问题标题】:JSON::XS "Usage" croakJSON::XS "用法" 呱呱
【发布时间】:2012-12-26 19:53:13
【问题描述】:

我似乎无法正确使用JSON::XS 的OO 接口。以下是我无法追踪的错误:

use JSON::XS;
my $array = ['foo', 'bar'];

my $coder = JSON::XS->new->utf8->pretty;
print $coder->encode_json($array);

这与以下内容有关:Usage: JSON::XS::encode_json(scalar) at test.pl line 5. 我一直在梳理JSON::XS 的代码,但在任何地方都找不到“用法:”警告。我的用法似乎与文档中的示例非常匹配。谁能告诉我哪里出错了?

【问题讨论】:

    标签: json perl perl-module


    【解决方案1】:

    JSON::XS有两个接口:函数式和OO。

    • 在功能界面中,功能名称为encode_json
    • 在OO接口中,方法是简单的encode,而不是encode_json

    以下两个 sn-ps 都可以工作:

    # Functional                  | # OO
    ------------------------------+-----------------------------------------
                                  | 
    use JSON::XS;                 | use JSON::XS;
    my $array = ['foo', 'bar'];   | my $array = [ 'foo', 'bar' ];
                                  |
    print encode_json($array);    | my $coder = JSON::XS->new->utf8->pretty;
                                  | print $coder->encode($array);
                                  |
    # ["foo","bar"]               | # [
                                  | #    "foo",
                                  | #    "bar"
                                  | # ]
    

    【讨论】:

    • OO 版本在@array$array 之间混淆(并将数组引用分配给@array
    • @Borodin : 很好发现...已修复
    • 感谢您回答这个问题!我想知道为什么作者不只使用一个方法名称并检查第一个参数是否是 JSON::XS 引用...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2015-10-21
    • 2012-03-04
    • 2011-12-22
    • 1970-01-01
    • 2016-10-27
    相关资源
    最近更新 更多