JSON 직렬화 개요
JSON 직렬화 개요
Kotlin 직렬화 라이브러리로 Kotlin 객체를 JSON으로, 그리고 다시 Kotlin 객체로 쉽게 변환하는 방법을 소개할게요.
본문
Kotlin 직렬화 라이브러리를 사용하면 Kotlin 객체를 JSON으로, 그리고 다시 그 반대로 쉽게 변환할 수 있어요. 이를 위한 핵심 도구는 Json 클래스이며, JSON을 생성하고 파싱하는 방식을 유연하게 제어할 수 있어요. 특정 JSON 동작을 처리하도록 Json 인스턴스를 구성하거나, 기본 작업에는 기본 인스턴스를 사용할 수 있어요.
Json 클래스를 사용하면 다음과 같은 일을 할 수 있어요.
-
encodeToString()함수로 Kotlin 객체를 JSON 문자열로 직렬화할 수 있어요. -
decodeFromString()함수로 JSON 문자열을 다시 Kotlin 객체로 역직렬화할 수 있어요. -
복잡한 JSON 구조를 다룰 때는
encodeToJsonElement()와decodeFromJsonElement()함수를 사용해JsonElement와 직접 작업할 수 있어요. -
Experimental 확장 함수를 사용해, JVM 스트림은 물론
kotlinx-io와 Okio 타입을 포함해 중간 문자열을 만들지 않고 I/O 소스를 직렬화·역직렬화할 수 있어요.
시작하기 전에 직렬화 라이브러리에서 다음 선언을 임포트하세요.
import kotlinx.serialization.*
import kotlinx.serialization.json.*
다음은 기본 Json 인스턴스를 사용해 Kotlin에서 JSON 직렬화가 어떻게 동작하는지 보여 주는 간단한 예시예요.
// Imports declarations from the serialization library
import kotlinx.serialization.*
import kotlinx.serialization.json.*
//sampleStart
@Serializable
data class User(val name: String, val age: Int)
fun main() {
// Uses the default Json instance
val json = Json
// Creates a User object
val user = User("Alice", 30)
// Converts the User object to a JSON string
val jsonString = json.encodeToString(user)
println(jsonString)
// {"name":"Alice","age":30}
// Converts the JSON string back to a User object
val deserializedUser = json.decodeFromString<User>(jsonString)
println(deserializedUser)
// User(name=Alice, age=30)
//sampleEnd
}
기본 구성을 사용하는 것 외에도, 알 수 없는 키를 무시하는 것 같은 특정 사용 사례에 맞게 Json 인스턴스를 사용자 정의할 수 있어요.
// Imports declarations from the serialization library
import kotlinx.serialization.*
import kotlinx.serialization.json.*
//sampleStart
@Serializable
data class Project(val name: String)
// Configures a Json instance to ignore unknown keys
val customJson = Json {
ignoreUnknownKeys = true
}
fun main() {
val data = customJson.decodeFromString<Project>("""
{"name":"kotlinx.serialization","language":"Kotlin"}
""")
println(data)
// Project(name=kotlinx.serialization)
}
//sampleEnd
다음 단계
-
직렬화·역직렬화의 다양한 사용 사례를 다루도록
Json인스턴스를 사용자 정의하는 방법을 배워 보세요. -
파싱하거나 직렬화하기 전에 JSON 데이터를 조작하고 다룰 수 있는 고급 JSON 요소 처리를 살펴보세요.
-
데이터를 더 세밀하게 제어할 수 있는 직렬화·역직렬화 중 JSON 변환 방법을 알아보세요.