JSONIC 1.2.1 beta1リリース

不具合が見つかったので、開発してリリースしてなかった新機能とともに一旦ベータ版をリリースしました。バイナリ互換性は保ててるはずだけど、問題があったら教えて欲しいです(あとSlim3で問題ないかどうかも)。

リリース内容は以下の通り

  • [不具合] JSONエンコード時に(改行やタブなど以外の)記号が割り当てられていない制御文字がエスケープされていなかった問題を修正しました(AS3版も同様です)。
  • [不具合] クラスキャッシュが残っているため、Slim3などでホットリローディングに失敗する問題にある程度対応しました(自信がないので、まだ問題が起こるようであれば教えてください)。
  • [仕様変更] Objectを戻すdecode/parseメソッドの戻り値をタイプパラメータ化し、キャストを不要にしました。
  • JSONのparseやformat時の挙動を変えるモード変更機能を追加し、厳密なチェックを行う STRICT モードとインラインでのJavaScript記述に便利な SCRIPT モードを追加しました。
  • JSONの検証を行うために JSON.validate メソッドを追加しました。
  • やや高速化を図りました。

一番大きいのはモード機構の追加でしょうか。元々、JSONICは設定ファイルをロードする目的で開発したこともあり、読み込みはかなり柔軟に行ってくれますが、それは逆に言えばRFCに沿った検証ができないということでもある。

今回、従来の挙動をTRADITIONAL(従来型)モードとして、新たに STRICT(厳密)モードと SCRIPT(JavaScript用)モードを追加しました(デフォルトは、TRADITIONALモード)。使い方はこんな感じ。

    JSON json = new JSON(JSON.Mode.STRICT);
    json.format(...);


STRICTモードは、そのまんまですが SCRIPTモードは説明が必要かと思うので一応説明を加えておく。経緯としては、案件でAJAXで素のJavaScriptを返したい場合、JavaオブジェクトをJSON化して出力する必要があったのだが、JSONでは、ルートは object か array でなければならないので単にString型を出力するということが困難だったりする。また、Date型がnumberで出力されてしまうので、いちいちラップしなければならないとか。

SCRIPTモードを指定すると、JSON.encodeの引数に String とか Integer とか null などを指定できる。また、Date型は new Date(...)と出力される。フレームワークなどに使う場合には便利ではないかと。