JavaでAPIをコールして受け取るとき、Jacksonなどを使うと思いますが、レスポンスを格納するためのJavaオブジェクトはどうやって作成してますか?
短いレスポンスしか返ってこないなら(前書いたTiqavなど)なら手打ちで問題ないですが、大体のAPIだと手打ちではどうしようもない量のパラメータが返ってきます。
そういう時は、レスポンスから自動生成しましょう。
#やり方
JSONのサンプルとして、http://json.org/example.htmlの一番上のJSONを使って、POJOに変換してみます。
jsonschema2pojoというOSSのWebサービス版を使います。
jsonschema2pojoへ移動し、テキストエリアへ生成元のJSONテキストを貼り付けます。
そして、Package名をPackageテキストエリアへ、ルートの要素が入るクラスの名前をClass nameへ記述します。
更に、Source TypeをJSON SchemaからJSONへ変更します。すでに何らかの方法でJSONをJSON Schemaに変換しているならそのままでOKです。
次はAnootation Styleを指定します。 使っているライブラリに応じて変更しましょう。(下の画像の緑枠)
自分はJackson2.Xなのでそのままです。
さらにその下のオプション群です。必要に応じてチェックをつけたり外したりしましょう。(下の画像の青枠)
で、最後にZipボタンをクリックすれば、POJO群が生成され、隣にリンクが表示され、そこからダウンロードできます。
#注意点
生成したPOJOですが1つ注意点があります。オプション群でUse long integersにチェックをつけていない限り、数値型(元のJSONでクォーテーションがついていない数値)はすべてIntegerになります。
SNSのAPIから返ってきた投稿idなどでは、桁数が多いため、Integerだとオーバーフローする可能性があります。
上記のとおり、Use long integersにチェックを入れれば回避はできますが、短い桁数の数値でもlong型になってしまうため、Integerで生成してオーバーフローする部分だけlongに変更するほうがいいと思います。
#Androidで使う時
生成したPOJOをAndroidで使うときの注意点
生成したPOJOには、@Generated("org.jsonschema2pojo")というアノテーションが含まれていますが、AndroidのJDKには、Generatedアノテーションが入っているjavax.annotationパッケージが存在しません。
ですので、build.gradleに、Javax.annotation APIを追記することで対処しましょう。
具体的には、build.gradleに、
compile group: 'javax.annotation', name: 'javax.annotation-api', version: '1.2'
を追記します。