【发布时间】:2016-12-11 11:01:06
【问题描述】:
下面的 Perl JSON 模块有什么区别?
我遇到过JSON::PP 和JSON::XS。 JSON::PP 的文档说它与 JSON::XS 兼容。这是什么意思?
我不确定它们之间有什么区别,更不用说使用哪一个了。有人可以澄清一下吗?
【问题讨论】:
-
在这种情况下兼容意味着两个模块给出相同的结果并具有相同的函数名称。底层实现虽然不同......
下面的 Perl JSON 模块有什么区别?
我遇到过JSON::PP 和JSON::XS。 JSON::PP 的文档说它与 JSON::XS 兼容。这是什么意思?
我不确定它们之间有什么区别,更不用说使用哪一个了。有人可以澄清一下吗?
【问题讨论】:
Perl 模块有时有不同的实现。 ::PP 后缀用于纯 Perl 实现(即可移植性),::XS 后缀用于基于 C 的实现(即速度),JSON 只是顶层模块本身(即你实际使用的)。
正如@Quentin 所说,this site 对它们有很好的描述。引用:
JSON
JSON.pm 是
JSON::PP和JSON::XS的包装器——出于兼容性原因,它还做了一些相当疯狂的事情,包括用于非常旧的 perls 的额外 shim 代码 [...]JSON::PP
这是标准的纯 perl 实现,如果您不依赖性能,直接使用它没有任何问题 [...]
JSON::XS
用 C 语言实现的 JSON 速度快得离谱。绝对精彩 [...]
如您所见,只需安装顶级 JSON 模块即可为您完成。关于兼容性的部分只是意味着它们都做同样的事情,即你应该从两者获得相同的输出。
几年前,我在我管理的 RHEL 服务器上安装了 Perl JSON 模块,这是一个非常简单的过程:只需从 CPAN site 安装(或构建)模块,就完成了。
安装应该是使用操作系统包管理器(如果在 GNU/Linux 中)、使用 cpan 实用程序或从源代码构建的简单案例。推荐使用 OS 包管理器,因为它有助于自动更新内容。
要验证它是否已安装,只需从终端尝试以下命令(假设是 GNU/Linux):
$ perl -e 'use JSON;'
如果它没有抱怨,那么你应该很高兴。如果你遇到错误,那么你应该准备好去冒险了。
【讨论】:
perl -MJSON\ 999(带有反斜杠和空格),因为它给出了您拥有的版本,或者抱怨。
可以安装JSON模块,cpan安装JSON
use JSON;
my $result = from_json($json);
if($result->{field})
{
# YOUR CODE
};
【讨论】:
JSON。 OP 显然对包装器/实现的区别感到困惑。虽然您的示例可能是正确的,但它并没有解决问题。如前所述,问题不在于 如何 使用该模块,而在于 他遇到的哪个选项 应该是正确的,尤其是当有有几个JSON::* 可用。