2011-09-21 50 views
1

此行
my $json = new JSON(autoconv => 0); # <-- line X
引发此错误为什么我会得到“用法:JSON :: XS :: new(klass)”错误?

Usage: JSON::XS::new(klass) at (...) line X 

有什么不对?

这是一个跟进我的问题Is there a way to force quotation of numbers in JSON 1.x Perl module?

+0

不再使用die.net,它已经过时。请参阅[metacpan.org](https://metacpan.org)获取模块文档,[perldoc.perl.org](http://perldoc.perl.org)获取核心Perl文档和[kernel.org](http: //www.kernel.org/doc/man-pages/)/[he.net](http://man.he.net)为genereal手册页。 – daxim

回答

3

JSON模块changed substantially1.15和2.00之间的API。为JSON 1.x编写的代码不一定适用于JSON 2.x.特别是,1.x构造函数带有可选参数。 2.x构造函数不带任何参数;相反,你在构建之后使用了mutator函数。

如果你必须支持某种原因,既JSON 1.x和2.x,你需要检查是否JSON->VERSION < 2(实际上JSON->VERSION < 1.99如果算上2.X API的开发版本),并有两个版本你的代码,一个用于1.x API和一个用于2.x.

+1

供参考:http://search.cpan.org/~makamaka/JSON-2.53/lib/JSON.pm可以阅读* 2.x中的新方法不再使用任何参数。你可以改为设置参数; *用下面的例子'$ json = JSON-> new-> pretty;' –

0

尝试:

my $json = JSON::XS->new; 

我没有看到任何autoconv在任何JSONJSON::XS任何地方,但JSON确实这样说:

$ JSON :: AUTOCONVERT

不消。 JSON后端模块具有往返完整性。

+0

我在http://linux.die.net/man/3/json上找到了关于'autoconv'选项的信息给JSON * new * constructor,它给出了这个例子'my $ json = new JSON(autoconv => 0,pretty = > 1);' –

+1

这看起来是'JSON'模块的一个令人难以置信的旧版本的文档,绝对不是'JSON :: XS'的文档,这正是您正在使用的。 – CanSpice

+1

@Piotr Dobrogost,键入'perldoc JSON'来获取你的JSON版本的文档。 – ikegami