Bỏ qua để đến nội dung

📋 Làm việc với JSON

🎯 Mục tiêu: Parse và serialize JSON với kotlinx.serialization - thư viện chính thức của Kotlin.


kotlinx.serialization là thư viện serialization chính thức của JetBrains cho Kotlin.

build.gradle.kts
plugins {
kotlin("plugin.serialization") version "1.9.0"
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
}

import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class User(val name: String, val age: Int)
fun main() {
// Object → JSON
val user = User("Alice", 25)
val json = Json.encodeToString(user)
println(json) // {"name":"Alice","age":25}
// JSON → Object
val parsed = Json.decodeFromString<User>(json)
println(parsed) // User(name=Alice, age=25)
}

@Serializable
data class Address(val city: String, val zipCode: String)
@Serializable
data class User(
val name: String,
val address: Address
)
fun main() {
val user = User("Alice", Address("Hanoi", "100000"))
val json = Json.encodeToString(user)
// {"name":"Alice","address":{"city":"Hanoi","zipCode":"100000"}}
}

@Serializable
data class Team(
val name: String,
val members: List<String>,
val scores: Map<String, Int>
)
fun main() {
val team = Team(
"Alpha",
listOf("Alice", "Bob"),
mapOf("Alice" to 100, "Bob" to 95)
)
println(Json.encodeToString(team))
}

@Serializable
data class User(
@SerialName("user_name") val name: String,
val age: Int = 0, // Default value
@Transient val password: String = "" // Không serialize
)
// JSON config
val prettyJson = Json { prettyPrint = true }
val lenientJson = Json { ignoreUnknownKeys = true }

// TODO: Parse API response
val jsonString = """
{
"status": "success",
"data": {
"users": [
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]
}
}
"""

Lời giải:

@Serializable
data class UserData(val id: Int, val name: String)
@Serializable
data class DataWrapper(val users: List<UserData>)
@Serializable
data class ApiResponse(
val status: String,
val data: DataWrapper
)
fun main() {
val response = Json.decodeFromString<ApiResponse>(jsonString)
response.data.users.forEach {
println("${it.id}: ${it.name}")
}
}

  • Setup kotlinx.serialization
  • Dùng @Serializable annotation
  • Parse JSON với Json.decodeFromString
  • Serialize với Json.encodeToString
  • Sử dụng @SerialName, @Transient

Tiếp theo: Coroutines Basics