3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

KotlinでJSONをシリアライズ / デシリアライズする【Kotlin Serialization】

Posted at

はじめに

KotlinでJSONを解析するにはJacksonやGsonなどのライブラリを使用する方法が有名かと思います。

しかしながら、これらはJavaの資源なのでKotlin/JS やKotlin/Native などでは使用することが出来ません。

そこでKotlin Serialization を使用します。

これはKotlin の開発元であるJetBrains が開発しているライブラリで、マルチプラットフォームで動作します。

今回はこのライブラリを使用してシリアライズ/デシリアライズする方法を紹介します。

使ってみる

導入する

使用するためにはGradle やMaven などに依存関係を追加します。

こちらのMaven Centralを参考にしてください。

今回の例ではGradle を使用します。

build.gradle.kts
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以外のフォーマットもサポートしています。

非常に便利なライブラリなのでもっと有名になってくれると嬉しいです。

参考文献

3
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?