トップ «前の日記(■2013-07-31) 最新 次の日記(■2013-08-07)» 編集

どんぞこ日誌

2003|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|07|08|12|
2007|01|04|08|12|
2008|01|02|03|04|06|07|08|10|11|12|
2009|01|02|04|05|06|07|08|09|11|12|
2010|01|03|04|07|08|10|11|12|
2011|01|02|03|04|05|06|07|08|10|12|
2012|01|02|03|05|06|07|08|09|10|
2013|01|02|07|08|09|
2014|08|09|
2015|08|
2016|06|07|12|
2017|01|03|

同人関連(どんぞこ楽屋) | 旧い雑文   


■2013-08-01

* Perl] CPANにあがってるJSON関連モジュール色々B!

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用のものということで。

[]