GsonでJSONデータとJAVAオブジェクトを相互に変換する【Androidアプリ開発】

GsonでJSONデータとJAVAオブジェクトを相互に変換する【Androidアプリ開発】
GsonでJSONデータとJAVAオブジェクトを相互に変換する【Androidアプリ開発】

GsonはGoogleが提供するJavaライブラリで、JSONのパースや生成を容易にするために使用されます。JavaオブジェクトをJSONに、またはJSONをJavaオブジェクトにシームレスに変換できます。この記事ではAndroid Studioのkotlinを使って、Gsonの使い方を解説します。

ライブラリの追加

Module :appdependencies に、Gsonライブラリを追加します:
build.gradle.kts(app)
implementation("com.google.code.gson:gson:2.8.9")

データクラスの用意

扱うJSONデータに沿ったデータクラスを作っておきます:

kotlin
data class User(val name: String, val age: Int)

JAVAオブジェクトをJSONデータに変換する

次は、オブジェクト化されたデータクラスを、JSONの文字列データへ変換する例です:

kotlin
val gson = Gson()

val user = User("John Doe", 30)
val json = gson.toJson(user)
Log.d("mopi", "json: $json")

Logcat出力:

log
json: {"age":30,"name":"John Doe"}

JSONデータをJAVAオブジェクトに変換する

次は、JSONの文字列データをデータクラスのJAVAオブジェクトへ変換する例です:

kotlin
val gson = Gson()

val jsonInput = "{\"name\":\"Mike Doe\",\"age\":4}"
try {
    val userFromJson = gson.fromJson(jsonInput, User::class.java)
    Log.d("mopi", "User: ${userFromJson.name}, Age: ${userFromJson.age}")
} catch (e: JsonSyntaxException) {
    Log.e("mopi", "JSONパースエラー: ${e.message}")
}

Logcat出力:

log
User: Mike Doe, Age: 4

上記のようにエラーハンドリングを実装しておくと、JSONの文字列データが壊れている場合に、 JsonSyntaxException が呼ばれます。ただし、キー名の間違いなどでは JsonSyntaxException は呼ばれずに、値にnullが入ります。

GsonでJSON配列を扱う

次は、Gsonを使用してJSON配列を操作する方法を示すコードです:

kotlin
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken

fun main() {
    val gson = Gson()

    // Userオブジェクトのリストを作成
    val users = listOf(User("John Doe", 30), User("Mike Doe", 4))

    // リストをJSON配列に変換
    val json = gson.toJson(users)
    println("JSON配列: $json")

    // JSON配列をUserオブジェクトのリストに変換
    val userListType = object : TypeToken<List<User>>() {}.type
    val usersFromJson = gson.fromJson<List<User>>(json, userListType)
    println("オブジェクトリスト:")
    usersFromJson.forEach { println("名前: ${it.name}, 年齢: ${it.age}") }
}

Logcat:

log
JSON配列: [{"age":30,"name":"John Doe"},{"age":4,"name":"Mike Doe"}]
名前: John Doe, 年齢: 30
名前: Mike Doe, 年齢: 4

TypeTokenとは

TypeTokenはGoogleのGsonライブラリにおいて、ジェネリックタイプの情報を保持し、処理するために使用されるクラスです。Javaでは型消去により、ジェネリックタイプの情報がランタイム時に失われますが、TypeTokenを使うことで、ジェネリックスの完全な型情報(例えば、List<String>Map<String, Integer>など)をGsonに提供し、正確なデシリアライズを可能にします。

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム