例えば、次のような感じのJSONをパースしたいときにどうするか?
[
{
"type":"rectangle",
"width":100,
"height":200
},
{
"type":"circle",
"radius":50
}
]
typeによってJSONの構造が異なっています。これをmoshiでパースしてみます。
build.gradle
implementation "com.squareup.moshi:moshi:1.8.0"
implementation "com.squareup.moshi:moshi-adapters:1.8.0"
kapt "com.squareup.moshi:moshi-kotlin-codegen:1.8.0"
ここで moshi-adapters
というのを追加しています。
data class
sealed classを使って、それぞれRectangleとCircleというクラスを作っています。パースしてこれらのクラスにマッピングします。
パース
最後にパースの処理です。
PolymorphicJsonAdapterFactory
というのを使っています。of
で親となるクラスと、分類するJSONキーを指定します。withSubtype
でJSONの値とそれに対応するクラスを指定します。
これで簡単にパースすることができます。
便利!!