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支援が可能になります。