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 を直使用している。

一日くらい社内でテストしたけどだいじょうぶっぽかったのでさっき本番投入してみた。どうだろうな。

by typester / at 2008-02-05T16:51:00 / perl · catalyst / Comments(0)