【Kotlin/Android Studio】GSONの使い方!JSONデータのパースとマッピング

この記事からわかること
- Android Studio/Kotlinのライブラリ:GSONの使い方
- APIで取得できるJSON形式のデータを変換する方法
- fromJson/toJsonメソッドの使い方
- GsonConverterFactoryでHTTPリクエストののレスポンスを変換する
index
[open]
\ アプリをリリースしました /
参考文献:公式リファレンス:GSON
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
APIで取得できるJSON形式とは?
さまざまなサービスがサービス内の情報を外部のサービスから参照できるようにAPIとして提供してくれています。
※APIとは「Application Programming Interface」の略称でアプリやプログラム、Webサービス同士を繋ぐインターフェースのことを指します。
APIで取得できるのはJSON形式と呼ばれる以下のようなjavascriptのオブジェクトの記法に則った形式になっていることが多いです。
上記のような簡素なネスト(深さ)なら良いですが、APIによっては複雑でより深いものもあるのでKotlin内での扱いは大変になります。
GSONとは?
GSONとはJSON形式のデータをパースしてKotlin(Java)内で操作しやすい形に変換する機能を提供してくれるライブラリです。JSON→オブジェクトへの変換だけでなく、オブジェクト→JSONへの変換もできるのでAndroidアプリ内でJSONを扱うならかなり便利なライブラリになります。
Androidアプリ内でAPIを取得して利用するのであればRetrofit
を使用することで簡単にHTTP通信を実装することができます。
JSON→Kotlinクラス
今回は簡単なJSON形式で受け取り、実際にGSONを使用してKotlinオブジェクトへ変換してみたいと思います。
流れ
- 依存関係の追加
- JSONにマッピングするデータクラスの作成
- JSONをクラスにマッピングする
依存関係の追加
GSONをAndroid Studio内で使用できるようにするには依存関係を追加する必要があります。build.gradle(Module)
のdependencies{ }
の中に以下を追加します。
JSONにマッピングするデータクラスの作成
GSONがJSONをマッピングするためのデータクラスを作成します。今回のJSONはpeople
というキーを持った辞書形式の中に配列としてPerson
情報を複数保持している形式なのでマッピングするためのデータクラスは以下のようになります。JSONのキー部分を各クラスのプロパティ名に、ネストになっている部分はクラスを分けたりして合わせていきます。
JSONをクラスにマッピングする
これで準備ができたのでJSONデータを受け取り、クラスに変換していきます。変換するためにはGSON
インスタンスを作成しfromJson
メソッドの引数に、対象のJSON文字列とマッピングしたいクラスを指定するだけです。
JSONのキーとプロパティ名を別にする
JSONのキーをそのままプロパティ名として使用したくない場合は@SerializedName("JSONのキー")
をプロパティに付与します。
JSONの変換対象に含めない
JSONの変換対象に含めたくないプロパティがある場合は@Transient
アノテーションを付与することで対象から外すことが可能です。
Kotlinクラス→JSON
GSONを使用することでKotlinクラスからJSON文字列に変換することも可能です。そのためにはtoJson
メソッドを使用します。
JSONの値を別のデータ型に変換する
例えば値として0
または1
を持つJSONの形式があった場合にこれをKotlin内ではBoolean
として扱いたい場合はTypeAdapter
クラスを用意します。詳細は以下の記事を参考にしてください。
GsonConverterFactoryでHTTPリクエストのレスポンスを変換
GSONにはHTTPリクエストのレスポンスをそのまま変換することができるGsonConverterFactory
クラスが用意されています。先に紹介したRetrofitと組み合わせることで簡単にHTTPリクエストのレスポンスで受け取ったJSONデータをKotlinオブジェクトに変換することができます。
SwiftならSwiftyJSONが有名です。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。