KotlinでJSONを扱う
今回はJSONの変換にポンコツ2人組が挑戦しました。KotlinでJSONを扱う方法は いろいろあるみたいですが、当記事ではGsonライブラリを使用する方法と Kotlinの公式シリアライゼーションライブラリを使用する方法を掲載しています。 これらのライブラリを使えば簡単にJSONのパースを行うことができます。
Gsonライブラリを使用する方法
build.gradleのdependencies内に下記の1行を追記します。バージョンはご自身の環境にあったものを指定して下さい。
implementation 'com.google.code.gson:gson:2.8.8'
次にデータクラスを用意しておきます。nameとageという2つのプロパティを持ったクラスです。
data class Person(val name: String, val age: Int)
メインとなるのが以下のコードです。 オブジェクトをJSONに変換(シリアライズ)するコードと、JSONをオブジェクトに変換(パース)するコードです。 JSON内の各オブジェクトの構造とクラスの構造が一致している必要があります。
// サンプルのPersonオブジェクトのリストを作成
val personList = listOf(
Person("Alice", 1),
Person("Latte", 45),
Person("Ebi", 2)
)
// Gsonオブジェクトを作成
val gson = Gson()
// シリアライズ(オブジェクトをJSONに変換)
val json = gson.toJson(personList)
println("シリアライズされたJSON:")
println(json)
println("")
val jsonString = """
[
{"name": "Alice", "age": 1},
{"name": "Latte", "age": 45},
{"name": "Ebi", "age": 2}
]
""".trimIndent()
val gson2 = Gson()
// パース(JSONをオブジェクトに変換)
val personListType = object : TypeToken<List<Person>>() {}.type
val persons: List<Person> = gson2.fromJson(jsonString, personListType)
println("パースされたオブジェクト:")
persons.forEach { println("Name: ${it.name}, Age: ${it.age}") }
Kotlinの公式シリアライゼーションライブラリを使用する方法
build.gradleのplugins内に下記の2行を追記します。バージョンはご自身の環境にあったものを指定して下さい。
id 'org.jetbrains.kotlin.jvm' version '1.9.20'
id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.20'
同じくbuild.gradleのdependencies内に下記の1行を追記します。バージョンはご自身の環境にあったものを指定して下さい。
implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0'
次にデータクラスを用意しておきます。nameとageという2つのプロパティを持ったクラスです。 @Serializableアノテーションを記述することがポイントです。
import kotlinx.serialization.*
@Serializable
data class MyDataClass(
val name: String,
val age: Int,
// 他のプロパティ
)
メインとなるのが以下のコードです。 JSONをオブジェクトに変換(パース)するコードです。
import kotlinx.serialization.json.Json
fun main(args: Array<String>) {
// JSONデータ
val json = """{"name":"Alice","age":30}"""
// JSONデータをデシリアライズ(パース)
val myData = Json.decodeFromString<MyDataClass>(json)
// データをログ出力する
println("Name: ${myData.name}, Age: ${myData.age}")
}
少ないコードで簡単に実装することができました。 JSON形式のデータを扱う機会は多いので、このような処理は是非覚えておきたいですね!