数年で一気に変わってます、JSONの取り扱い処理。
Kotlin 内蔵の serialization を使うのが良いでしょう。
👉 Kotlin/kotlinx.serialization: Kotlin multiplatform / multi-format serialization
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
val contentType = "application/json".toMediaType()
val json = Json {
ignoreUnknownKeys = true
isLenient = true
} // *
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(json.asConverterFactory(contentType))
.build()
}
処理時に便利に設定を変えられるようになっているので、
よくあるやつを並べておきます。
👉 【仮想通貨】Cryptowatch Public Market REST API を眺める
ignoreUnknownKeys = true
デフォルトでは、逆シリアル化中に不明なキーが検出されるとエラーが発生します。 これを回避し、ignoreUnknownKeysプロパティをtrueに設定することで、このようなキーを無視できます。
👉 kotlinx.serialization/json.md at master · Kotlin/kotlinx.serialization
公開されている WEB-API には不要なデータがたくさんあります。
それを無視するための設定です。
isLenient = true
デフォルトでは、JsonパーサーはさまざまなJSON制限を強制して、可能な限り仕様に準拠します(RFC-4627を参照)。 特に、キーは引用符で囲まれている必要があり、リテラルは引用符で囲まれていない必要があります。 これらの制限は、isLenientプロパティを使用して緩和できます。 isLenient = trueを使用すると、非常に自由にフォーマットされたデータを解析できます。
私はどうしても必要なときにしか使いません。
RFCに基づかないJSONは一応留意しておきたいので。
👉 kotlinx.serialization/json.md at master · Kotlin/kotlinx.serialization
👉 RFC 4627 - The application/json Media Type for JavaScript Object Notation (JSON)
まとめ
一度、テンプレート化しておくと、当分使い回すことができます。
調べるときに、いろいろ古い情報が多くて時間かかったので、メモとして。
👉 【Retorofit】コピペで使える NetworkModule【Dagger Hilt】
👉 Kotlin/kotlinx.serialization: Kotlin multiplatform / multi-format serialization
【Retorofit】コピペで使える NetworkModule【Dagger Hilt】 https://t.co/zf9cpgxhP8 #android #kotlin #hilt #プログラミング
— chanzmao (@maochanz) June 2, 2022