JR東日本 駅発車メロディメドレー
http://www.nicovideo.jp/watch/utiW_0zOR_bdM
それにしても、にこにこ動画スゲーな。
Simple JSON Library for Java
非常にシンプルな1クラス/1ファイルのJSONデコード/エンコードクラスを作ってみた。Java用のJSONライブラリはすでにあるのだけど、出力されるJSONがJavaに依存していたりクラス数が多かったりと使い辛い面があったので車輪の再発明をしてみました。ライセンスは、Apache License 2.0で配布しますので適当に使ってください(パッケージ名を適当に変えて自分のパッケージに組み込んでもらって構わんです)。
一応、テストケースは通っているが自信がないので、しばらく自分で使ってみて問題ないようであれば1.0にあげるかにゃー、という感じ。
[2007/03/04追記] JavaBeansからjson object変換時にpublicなpropertyとfieldのみを対象にするよう仕様を変更(同名のpropertyとfieldがある場合はpropertyが優先)。versionも0.8に変更。
[2007/02/18追記] Localeクラスの仕様を勘違いしていたことによるバグを修正。Calendarクラスへの対応を追加。また、JavaBeansからJSONへの変換の際にstaticメソッドも調べていたのでインスタンスのメソッドのみ調べるように修正。同じくJavaBeansからの変換時に自分を戻すメソッドがある場合に無限で循環してしまう問題があったため修正。versionも0.7に上げた。
[2007/02/11追記] テストケース増やしてみたら、charのケースでencodeに失敗していたので修正。versionも0.6に上げた。
使い方はこんな感じ。
// JavaのオブジェクトをJSONに変換します。 String s = Json.encode(o); // JSONをJavaのオブジェクトに変換します //(エラー時は、java.text.ParseException吐きます) Object o = Json.decode(s);
スペックはこんな感じです。
encode時(JavaからJson)の変換ルール
java type | json type |
---|---|
java.util.Map | object |
java.lang.Object (public propertyあるいはfieldが対象) | |
java.lang.Object | array |
java.util.Collection | |
boolean, byte, short, int, long, float, double | |
java.lang.String | string |
char[] | |
java.lang.Character | |
char | |
java.util.Locale | string (言語コード-国コード) |
java.lang.Number | number |
byte, short, int, long, float, double | |
java.util.Date | number (1970年からのミリ秒) |
java.util.Calendar | |
java.lang.Boolean | true/false |
boolean | |
null | null |
結果が不定なメソッドのテスト
どういうふうに書くのが一般的なんだろうか。