你会推荐哪种Perl模块用于JSON操作?

时间:2013-01-29 20:15:48

标签: json perl cpan perl-module

像往常一样,我很乐意与CPAN打交道,因为它得到了我们所需要的一切。像往常一样,我迷失了,因为有很多东西。

我可以自己找到核心JSON,并感受JSON::Tiny其他人的热情。

我的需求非常简单(解析来自Open Library API的东西),也许有一天会暴露我们自己的数据。

您是否还有其他任何模块可用于此任务?

6 个答案:

答案 0 :(得分:18)

JSON模块就像一个冠军,但如果你需要一个更快的解析器,请使用这个:JSON::XS,这需要一个本机编译。

请注意,JSON 2.0及更高版本仅仅是JSON :: XS(如果已安装)或JSON :: PP(后备)的前端。

答案 1 :(得分:12)

我总是使用JSON::XS。完整,强大,经过验证,快速*,易于使用,甚至在您需要时也具有一定的灵活性。

它可能是最常用的JSON解析器,但大多数都通过JSON访问它(但这样做会冒更慢的JSON::PP使用)。

根据{{​​3}}的文档,

* - 比JSON :: Tiny快“一个数量级”。

答案 2 :(得分:11)

由于您说您是从在线来源获取数据,因此您可以考虑使用Mojolicious工具套件。通过这种方式,您可以get the dataparse it甚至可以使用JSON pointers来提取信息。

基本:

#!/usr/bin/env perl

use strict;
use warnings;

use Mojo::UserAgent;

my $ua = Mojo::UserAgent->new;
my $data = $ua->get('http://openlibrary.org/search.json?title=perl%20modules')
              ->res
              ->json;

使用url构造函数和JSON指针:

#!/usr/bin/env perl

use strict;
use warnings;
use v5.10;

use Mojo::URL;
use Mojo::UserAgent;

my $ua = Mojo::UserAgent->new;
my $url = Mojo::URL->new('http://openlibrary.org/search.json')
                   ->query( title => 'perl modules' );

say $ua->get($url)
       ->res
       ->json('/docs/0/title_suggest');

请注意,响应对象上的json方法要么返回整个已解析的数据结构,要么可以使用指针字符串(如第二个示例中所示)返回一个子集以使您快速前进。享受。

答案 3 :(得分:7)

我建议使用JSON::MaybeXS - 使用Cpanel :: JSON :: XS并回退到JSON :: XS和JSON :: PP。

Cpanel :: JSON :: XS比JSON :: XS有improvements,因此JSON :: MaybeXS使您的代码更好,更便携。

如果我不确定在特定情况下使用哪个模块,我通常会查看Task::Kensho,尽管他们目前还没有JSON,我已经报道了对他们来说!

答案 4 :(得分:4)

我每次机会都开始使用Mojo::JSONMojolicious易于安装,而Joel Berger显示his answer,它还有更多内容。

答案 5 :(得分:2)

JSON::XS将是一个很好的模块。