■2013-08-01
* Perl] CPANにあがってるJSON関連モジュール色々
JSON::XS とそれにまつわる歴史的な過去の話、まとめ。を読んで。昨日のお昼に某所でこの話題になって、Cpanel::JSON::XSやJSON::MaybeXSの話やらCPANにあがってるJSON関連のモジュールの話をしてました。せっかくだからモジュールの紹介をしてみようかと。
【追記】tokuhiromさんがツイートしてるように、今はJSONとJSON::XS/PPを使えば特に困ることはほとんどないと思います。
JSON::XS
後存知の通り、一番メジャーなXSモジュール。速い軽い。作者のリーマンさんが何かと話題になりますが、(割と)よい人です。あとjson_xsというコマンドツールがついてきて地味に便利。
JSON::PP
JSON::XSと*ほぼ*完全な互換性を持ったPurePerlなモジュール。遅い重い。作者のまかまかさんが夏コミにでるそうですよ? それはさておき、Perl 5.14から標準モジュールになったので最近のPerlをインストールすれば最初から使えるはず。あとjson_ppというコマンドツールがついてきて、地味に便利というわけではないけど、まあこれも最初から使えるという利点が。
JSON
最初にCPANに登録されたJSON関連モジュール。昔むかしは単体でdecode/encodeしてた。現在はJSON::XSがあればそちらを、なければJSON::PPを、それもなければ同梱のJSON::BackportPP(JSON::PPと同じもの)をバックエンドにして動作するAPIのラッパー。バージョン1.xから2.0になるときにJSON::PPを同梱してJSON::XSとAPIを揃えた。結果、色んな人から「いきなりAPIを変えるな!」とものすごく怒られた。
Cpanel::JSON::XS
tokuhiromさんのページで説明されているように、JSON::XSのテストが一時こけてたのに業を煮やして登場。JSON::XSからforkされた。ドキュメントでJSON関連のモジュールはたくさんあるけど、メンテナがちゃんとメンテしてないと書かれてます。すみません、すみません。特筆すべきはPerl 5.6でも動くという点。
JSON::MaybeXS
「JSONのサポートモジュールにCpanel::JSON::XSも入れてよ」といわれたのをほったらかしてたら登場した。Cpanel::JSON::XSかJSON::PPがバックエンドになる。
JSON::XS::VersionOneAndTwo
JSON::XSがバージョン2.00から2.01になるとき一部のAPIが変わった。のに怒った人たちがつくったラッパーモジュール。今使うことはないはず。
JSON::Tiny
Mojo::JSONから派生。PurePerlなモジュール。JSON::PPと違ってパース処理が正規表現なため高速。JSON::PPより2,3倍速いし、ファイルサイズも小さい。ただしオプションは少なめ。
JSON::DWIW
かなり昔からあるXSモジュール。使ったことないけど、色々できることが多そう。ここ数年アップデートされてない。
JSON::Parse
このモジュールの作者の方がJSON::XS/PPの文字列処理がおかしいというレビューをされたので、使い方が悪いのではと返事をした結果、自作された。decodeのみだけどXSモジュール。JSON::XS/PPとUNICODEの取り扱い方が違う。
JSON::Syck
YAML::Syckに同梱されてるXSモジュール。歴史は古いが、現在では代わりにJSON::XSを使うようドキュメントに書かれている。
JSON::Any
JSON, JSON::XS, JSON::Syck, JSON::DWIWのいずれかのラッパーとして機能する。各モジュールでメソッド名がバラバラだった時代(今でもバラバラだけど)に需要があった。最近JSON::PPとCpanel::JSON::XSにも対応。
だいたいこんな感じかしら。他にもJSONフォーマットを利用したモジュールがたくさんあるけど、ここではdecode/encode用のものということで。