WebAPI絡みのアプリを作るならJSONの取り扱いは必須。

JSONObject json = Util.parseJson(jsonString);

このようにあらかじめJSONをパースするクラスは用意されているいるけど、このままじゃ使いにくい。

JSONObjectには、

  • Object get(String name)
  • int getInt(String name)

といったObjectやらintやらで値が取り出せるメソッドがあるが、

  • 存在しないnameに対して値を取り出すと例外を投げる
  • 深い階層の値を取り出すとき煩雑なコードを書く必要がある
  • 例えばobj.aaa.bbb.cccの値を取り出すときとか面倒・・・

と、いろいろ使い勝手が悪い。

そこで、

String str = json.stringForPath("aaa.bbb.ccc"); /* 存在しない場合はnilを返す */

とか

String str = json.stringForPath("aaa.bbb.ccc", "default"/*存在しなかった時の値*/);

という風にパス指定で値を取り出せるクラスを作ってみた。

JSONPathQuery.java

以前にTwitterやfacebookのAPIを叩くコードを書いたことがあって、そのときはレスポンスごとにクラスを作って対応してました。そのほうが綺麗なんだけど、開発効率が悪いし、APIの仕様変更や追加仕様への対応も遅れる。変化が激しいから、そこは美しさより臨機応変さを取ることにした。

なんで我ながらこのクラス作ってよかったと思ってます。

※githubを他に漁れば既にありそうだけど・・・