JSON配列をKotlinのListに変換する

JSON配列がKotlinのList型にどのようにマッピングされるかを学びます。プリミティブリスト、オブジェクトリスト、ネストされた配列、空配列の処理を実例で解説します。

Collections

詳細な説明

JSON配列からKotlinのListへ

JSON配列はKotlinのList<T>型にマッピングされます。要素型は配列の内容から推論されます -- 文字列配列はList<String>に、オブジェクト配列はList<SomeDataClass>になります。

プリミティブ配列

{
  "tags": ["kotlin", "android", "api"],
  "scores": [95, 87, 92]
}
data class Response(
    val tags: List<String>,
    val scores: List<Int>
)

オブジェクトの配列

{
  "users": [
    { "id": 1, "name": "Alice" },
    { "id": 2, "name": "Bob" }
  ]
}
data class Response(
    val users: List<User>
)

data class User(
    val id: Int,
    val name: String
)

空の配列

空のJSON配列([])は曖昧です -- コンバーターは要素型を判別できません。多くのコンバーターはList<Any>をデフォルトとします。期待されるデータがわかったら手動で正しい型を設定してください。

ネストされた配列

配列の配列([[1,2],[3,4]])はKotlinではList<List<Int>>になります。このパターンは行列データ、座標ペア、バッチ操作で使用されます。

List vs MutableList

コンバーターはデフォルトでList<T>(イミュータブル)を生成します。デシリアライゼーション後にコレクションを変更する必要がある場合はMutableList<T>に変更してください:

data class Response(
    val users: MutableList<User>
)

結果のイテレーション

response.users.forEach { user ->
    println("User ${user.id}: ${user.name}")
}

// 分解宣言を使用
response.users.forEach { (id, name) ->
    println("User $id: $name")
}

Kotlinの分解宣言はdata classで自動的に動作するため、リストのイテレーションが簡潔で読みやすくなります。

ユースケース

ページネーションされたAPIレスポンス、リストエンドポイント、バルク操作はすべてオブジェクトの配列を返します。型付きKotlinリストに変換することで、Android RecyclerViewアダプターやKotlinサーバーハンドラーで安全なイテレーションとIDE支援が可能になります。

試してみる — JSON to Kotlin

フルツールを開く