2013-01-12 105 views
5

我似乎无法正确使用JSON::XS的OO接口。一个错误以下嘎嘎叫着我无法追踪:JSON :: XS“Usage”croak

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我不能找到一个“用法:”任何地方的警告。我的用法似乎与文档中的示例非常匹配。任何人都可以告诉我我哪里出了问题?

回答

10

JSON::XS有两个接口:功能和OO。

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

以下两个片段的两个工作:

# 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" 
           | # ] 
+0

的OO版本@ array'和'$ array'之间'混淆(和阵列参考分配给'@ array') – Borodin

+0

@Borodin :斑点...固定 – Zaid

+0

感谢您回答这个问题!我想知道为什么作者不只是使用一个方法名称,并检查第一个参数是否是JSON :: XS引用... –