JSON::XS を実戦投入した
いままでずっと JSON::Syck
を使い続けていたのだけど、いまの JSON::Syck
には
/y|Y
|n|N
|yes|Yes|YES
|no|No|NO
|true|True|TRUE
|false|False|FALSE
|on|On|ON
|off|Off|OFF
|null|Null|NULL
|~
/x
の正規表現にマッチする値はシングルクオートでくくられてしまうという仕様があり、これはJSONの仕様に反するのでパーサーによっては正しく処理できないものがある。
これがFlashから使うJSON APIでもろにはまって、adobe の corelib に入っている JSON のパーサーはこれをパースできない。(rubyのyamlパーサーでもエラーになるようだ)
cho45さんがこれを直すパッチを書いてくれたのだけど、いい機会なので JSON::XS
を試してみた。JSON::Syck
のドキュメントからも言及されてるしね。
Catalyst::View::JSON
から使うには以下のような感じで MyApp::View::JSON
をかけばOK。
package MyApp::View::JSON;
use strict;
use base 'Catalyst::View::JSON';
use JSON::XS ();
sub new {
my $self = shift->NEXT::new(@_);
my $dumper = JSON::XS->new->latin1;
$self->json_dumper(sub { $dumper->encode($_[0]) });
$self;
}
1;
JSON::Any
つかってないのは Any だと環境変数で使用ライブラリを上書きできてしまっていやなので XS を直使用している。
一日くらい社内でテストしたけどだいじょうぶっぽかったのでさっき本番投入してみた。どうだろうな。