JSON Library バージョンアップ計画

Flexjsonのゆるゆるの仕様にショックを受けたので、新機能を追加する気になった。まだ公開はしないけど、extension modeという形で実装する(すでに8割方は実装できた感じ)。

具体的には、setExtensionModeをtrueにすることで下記を可能にする。

  • JSONからJavaへの変換(JSON#parse)
    1. rootにobjectやarray以外の要素(falseとか数字とか文字列とか)を取れるようにする
    2. objectのkeyに"文字列"だけでなく'文字列'やidentifierを取れるようにする(JavaScriptの仕様だと数値も取れるが使い道が思いつかないので対応しない)
    3. /**/および//形式のコメントを無視できるようにする
  • JavaからJSONへの変換(JSON#format)
    1. rootにobjectやarray以外の要素(falseとか数字とか文字列とか)を取れるようにする
    2. DateあるいはCalendar型を変換する場合、longではなくnew Date(long)で出力する
    3. NaN、Infinity、-Infinityの場合、文字列ではなくそのままNaN、Infinity、-Infinityと出力する

一見してわかる通り、変換内容に非対称性があるが、Javaへの変換は間口を広くすることで多少データが不適切でも読み込める方向での拡張となっており、またJSONへの変換はブラウザ上のJavaScriptインスタンスに自然に変換できる方向での拡張にしているので、拡張モードだからといってそれほど変なことにはならない(まぁ、デフォルトはoffだし)。

[追記] そういえば、今byte型は数値扱いで出力しているのだけれど、16進出力した方がよいのだろうか。当初BASE64で出力する手もあるなぁとか考えたが、そんなのクライアントで展開するのかよという気がしたので結局やめた。