【Android】Kotlin Moshi使い方メモ JSONをオブジェクトに変換
はじめに
moshiでjsonをオブジェクトに変換するコードをメモしておく。今回扱いたいのはクラスは以下のようなクラス
・別クラスのListのプロパティがある
・null許容のプロパティがある
・Date型のプロパティがある
swiftでcodableと同じようなことをやりたかった
実装
app/build.gradle
dependencies { ・・・ implementation 'com.squareup.moshi:moshi:1.8.0' implementation("com.squareup.moshi:moshi-kotlin:1.8.0") implementation 'com.squareup.moshi:moshi-adapters:1.8.0' }
データクラス
class User( val id: Int, val name: String, val comment: String?, val images: List<UserImage>, val created: Date ) class UserImage(val url: String)
MainActivity
package xxx.yyy.zzz import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.util.Log import com.squareup.moshi.Moshi import com.squareup.moshi.Types import com.squareup.moshi.adapters.Rfc3339DateJsonAdapter import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import java.lang.reflect.Type import java.util.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val json = """ [{ "id":1, "name":"user1", "images":[ {"url":"http://example.com/path/to/img1"}, {"url":"http://example.com/path/to/img2"} ], "created": "1985-04-12T23:20:50.52Z" }, { "id":2, "name":"user2", "images":[ {"url":"http://example.com/path/to/img1"}, {"url":"http://example.com/path/to/img2"} ], "created": "1985-04-12T23:20:50.52Z" }] """.trimIndent() val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).add(Date::class.java, Rfc3339DateJsonAdapter()).build() val type: Type = Types.newParameterizedType(List::class.java, User::class.java) val campaigns = moshi.adapter<List<User>>(type).fromJson(json) campaigns?.forEach { Log.d("", "%d, %s, %s, %s".format(it.id, it.name, it.comment, it.created)) } } }
以上です