📋 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.
💡 Giới thiệu
Phần tiêu đề “💡 Giới thiệu”kotlinx.serialization là thư viện serialization chính thức của JetBrains cho Kotlin.
plugins { kotlin("plugin.serialization") version "1.9.0"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")}📝 Cú pháp cơ bản
Phần tiêu đề “📝 Cú pháp cơ bản”import kotlinx.serialization.*import kotlinx.serialization.json.*
@Serializabledata 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)}🔧 Nested Objects
Phần tiêu đề “🔧 Nested Objects”@Serializabledata class Address(val city: String, val zipCode: String)
@Serializabledata 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"}}}📦 Lists và Maps
Phần tiêu đề “📦 Lists và Maps”@Serializabledata 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))}🎯 Custom Serialization
Phần tiêu đề “🎯 Custom Serialization”@Serializabledata class User( @SerialName("user_name") val name: String, val age: Int = 0, // Default value @Transient val password: String = "" // Không serialize)
// JSON configval prettyJson = Json { prettyPrint = true }val lenientJson = Json { ignoreUnknownKeys = true }🛠️ Thực hành
Phần tiêu đề “🛠️ Thực hành”// TODO: Parse API responseval jsonString = """{ "status": "success", "data": { "users": [ {"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"} ] }}"""Lời giải:
@Serializabledata class UserData(val id: Int, val name: String)
@Serializabledata class DataWrapper(val users: List<UserData>)
@Serializabledata 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}") }}✅ Checklist
Phần tiêu đề “✅ Checklist”- Setup kotlinx.serialization
- Dùng
@Serializableannotation - Parse JSON với
Json.decodeFromString - Serialize với
Json.encodeToString - Sử dụng
@SerialName,@Transient
Tiếp theo: Coroutines Basics