Skip to Content
Kotlin📘 Ngôn ngữ Kotlin📋 Làm việc với JSON

Làm việc với JSON trong Kotlin

🎯 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

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") }

📝 Cú pháp cơ bản

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) }

🔧 Nested Objects

@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"}} }

📦 Lists và Maps

@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)) }

🎯 Custom Serialization

@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 }

🛠️ Thực hành

// 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}") } }

✅ Checklist

  • 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

Last updated on