JSONIC 1.1.0 ベータ1 リリース

風邪をひいてしまったこともあり仕事を休んで部屋でごろごろしてるのだが、せっかく時間があるのにもったいないと、作りためていたJSONICの変更をベータ版扱いでリリースしてみた。

http://jsonic.sourceforge.jp/

大きな変更点は、jQueryとかExtJSとかで使いやすいように、RESTモードでx-www-form-urlencoded(名前とパラメータを=と&で結んだやつね)をサポートしたことと、XMLからJSONへの変換を独自のものからJsonMLに変更したこと。

x-www-form-urlencodedのサポートは、わかりにくいかもしれないので書いてくと、例えば「a=1&a.b=2&a.b.c=3&x=4」のようなデータがPOSTで送られてきたとすると以下のJSONが送られてきたかのように処理する。

{
  "a": {
    null: "1",
    "b": {
      null: "2"
      "c": "3"
    }
  },
  "x": "4"
}

JSONの本来の仕様だとnullキーは不許可なのだが、JSONICではポステルの法則に従いJSON -> Javaの時は許すが、Java -> JSONの時は変換対象にならないようになっている。

なお、JSONICJSON -> Java変換の仕様の妙なのだが、1.0.3からはキー(例えば"a")のターゲットがobjectやarrayであるにも関わらず、変換先が単独型(intやStringなど)の場合、objectの場合はnullキーの値、arrayの場合は0番目の値を使うというルールになっているため、"a"をintに変換するよう指示すると

  1. "a"の値のobject({null: "1", "b": ...})を取得
  2. objectのnullキーの値("1")を取得
  3. "1"をintに変換

という手順を経て、aに1がセットされる。

そういえば、RPCモードだけでなく、RESTモードでもエラー時にExceptionのプロパティがクライアントに送られるという機能も追加されていた(はず)*1。ここは最近加えたばかりであまりテストしてないのでうまく動作してないかも。

*1:なお、この話を聞くと誤解する人がいると思うので、念のため書いておくと、Throwableのプロパティは対象にならないので、getMessageのデータはオーバーロードライドしない限り送られない。これはセキュリティ上の理由による