はじめに
KotlinでJSONを解析するにはJacksonやGsonなどのライブラリを使用する方法が有名かと思います。
しかしながら、これらはJavaの資源なのでKotlin/JS やKotlin/Native などでは使用することが出来ません。
そこでKotlin Serialization を使用します。
これはKotlin の開発元であるJetBrains が開発しているライブラリで、マルチプラットフォームで動作します。
今回はこのライブラリを使用してシリアライズ/デシリアライズする方法を紹介します。
使ってみる
導入する
使用するためにはGradle やMaven などに依存関係を追加します。
こちらのMaven Centralを参考にしてください。
今回の例ではGradle を使用します。
plugins {
kotlin("jvm") version "1.6.10"
// For Serialization
kotlin("plugin.serialization") version "1.6.10"
}
repositories {
mavenCentral()
}
dependencies {
// For Serialization
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2")
}
シリアライズするクラスの作成
シリアライズしたいクラスをシリアライズ可能なクラスとして作成します。
@Serializable
data class Fruit(
@SerialName("name")
val name: String,
@SerialName("value")
val value: Int,
@SerialName("amount")
val amount: Int
)
シリアライズするクラスに@Serializable
アノテーションを付けます。
対応する値に@SerialName
アノテーションをつけてバインドします。このアノテーションはシリアライズ前後で名前が同じ場合は省略可能です。
シリアライズ / デシリアライズ する
クラスを作成することができれば、あとはシリアライズするだけです。
シリアライズするためには以下のように記述します。
val apple = Fruit("りんご", 100, 1)
val json = Json.encodeToString(apple)
encodeToString()
を用いてインスタンスをJSONにシリアライズしています。
また、デシリアライズするにはdecodeFromString()
を用いて以下のように記述します。
// シリアライズ
val apple = Fruit("りんご", 100, 1)
val json = Json.encodeToString(apple)
// decodeFromString() でデシリアライズ
val fruit = Json.decodeFromString(json)
println(fruit.name) // 結果: りんご
リストを使う場合
リストを用いた場合でも、シリアライズ / デシリアライズを行うことができます。
リストをシリアライズするには以下のように記述します。
val list = listOf(Fruit("りんご", 100, 1), Fruit("みかん", 500, 3))
val json = Json.encodeToString(list)
デシリアライズを行う場合は、以下のようにListSerializerを用いて記述します。
// シリアライズ
val list = listOf(Fruit("りんご", 100, 1), Fruit("みかん", 500, 3))
val json = Json.encodeToString(list)
// デシリアライズ
val obj = Json.decodeFromString(ListSerializer(Fruit.serializer()), json)
詳しくは
Kotlin Serialization ではこの他にも様々な機能があります。
詳しくはドキュメントを参照してください。
おわりに
Kotlin Serialization はJSON以外のフォーマットもサポートしています。
非常に便利なライブラリなのでもっと有名になってくれると嬉しいです。
参考文献