13日の金曜日なので普段使っているJSONパースライブラリを紹介する

こんにちは、Androidエンジニアの梅津です。

今日は13日の金曜日ということでJSON関連の話をしたいなーと思い、
普段業務で使っているJSONのパースライブラリ、「JsonPullParser」の紹介をすることにしました。
JsonPullParserはアノテーションを用いてJSONJavaのクラスを対応付けてくれるライブラリです。
他にも似たライブラリとしてGsonやJacksonなどがありますが、僕はJsonPullParserを好んで使っています。
JsonPullParserはライブラリ自体が軽量だったり、JSONの対応付けの際にリフレクションを使わないためProGuardに強いというところが嬉しいですね。

導入方法
まずはaptを使用するためにpluginを入れます。

続いてJsonPullParserを読み込みます

gradleファイルを同期すれば準備完了です。

JSONのモデルクラスを用意する
今回使うJSONhttps://api.github.com/users/umetsu/repos から取ってきます。
中を見ると以下のようになっています。

[
  {
    "id": 20613486,
    "name": "AndEngineSampleOnGroovy",
    "owner": {
      "login": "umetsu",
      "id": 4004120,
    },

    ... 省略
  },
  {
      ... 省略
  }
]

このJSONを対応付けるためのモデルクラスを作成しましょう。


モデルクラスには@JsonModelというアノテーションをつけます。
そしてフィールドに@JsonKeyというアノテーションをつけることで、JSONとの対応付けを行ってくれます。
フィールドのゲッターとセッターも忘れずに用意しましょう。

もとのJSONを見るとオブジェクトの中に owner というオブジェクトが入っています。
オブジェクトが入れ子になっている時は、入れ子になっているオブジェクトに対応するクラスも用意します。


こちらでは decamelize というオプションが出てきました。
これは avatar_url という形のJSONキーを、モデルクラスの avatarUrl フィールドに対応づけるのに必要な設定です。
このオプションが false の時はモデルクラスのフィールド名も avatar_url としなければいけません。

モデルクラスの作成はこれで完了です。

JSONとモデルクラスの対応付け
ここまでの段階で一度ビルドしておきましょう。
するとRepositoryGenというクラスが自動的に作られています。
JSONとの対応付けには、この自動生成されたクラスを使用します。


GithubService#loadRepositoriesResponseというメソッドでJSONを取得します。
本来はGithub APIを叩く通信処理を書きますが、今回はサンプルなのでassetsフォルダに保存しておいたJSONを返すようにしました。

取得したJSONをRepositoryGenクラスに渡します。
今回のJSONは配列( [] )で始まっているため、RepositoryGen#getListメソッドを使用してRepositoryクラスのリストを返してもらうようにします。
RepositoryGen#getというメソッドもあります。こちらはJSONがオブジェクト( {} )から始まっている場合に使用します。

これでJSONとモデルクラスの対応付けは完了です。
とても簡単ですね。

対応付けしたRepositoryクラスのリストをListViewで表示してみました。
リポジトリの名前やオーナーの名前が取得できているのが確認できます。

device-2015-11-13-173625


以上でJsonPullParserの紹介は終わりです。
お疲れさまでした。