PHpullh
학습 라이브러리/Kotlin/kotlinx.serialization JSON

KOTLIN · 파일/IO

kotlinx.serialization JSON

Kotlin 공식 직렬화 라이브러리로 data class를 JSON으로 변환합니다.

파일/IO중급kotlinx.serializationJSON@Serializable@SerialName직렬화

핵심 설명

Kotlin 공식 직렬화 라이브러리로 data class를 JSON으로 변환합니다.

Kotlin code

<span class="kw">import</span> <span class="pk">kotlinx.serialization.*</span>
<span class="kw">import</span> <span class="pk">kotlinx.serialization.json.*</span>

<span class="an">@Serializable</span>
<span class="kw">data class</span> <span class="ty">User</span>(
    <span class="kw">val</span> id: <span class="ty">Int</span>,
    <span class="kw">val</span> name: <span class="ty">String</span>,
    <span class="an">@SerialName</span>(<span class="str">"email_address"</span>)
    <span class="kw">val</span> email: <span class="ty">String</span>,
    <span class="kw">val</span> active: <span class="ty">Boolean</span> = <span class="kw">true</span>
)

<span class="kw">fun</span> <span class="fn">main</span>() {
    <span class="kw">val</span> json = Json {
        prettyPrint = <span class="kw">true</span>
        ignoreUnknownKeys = <span class="kw">true</span>
        encodeDefaults = <span class="kw">false</span>
    }

    <span class="kw">val</span> user = User(<span class="num">1</span>, <span class="str">"Alice"</span>, <span class="str">"alice@test.com"</span>)

    <span class="cm">// 직렬화</span>
    <span class="kw">val</span> jsonStr = json.<span class="fn">encodeToString</span>(user)
    <span class="fn">println</span>(jsonStr)

    <span class="cm">// 역직렬화</span>
    <span class="kw">val</span> decoded = json.<span class="fn">decodeFromString</span>&lt;<span class="ty">User</span>&gt;(jsonStr)
    <span class="fn">println</span>(decoded.name)

    <span class="cm">// 리스트 직렬화</span>
    <span class="kw">val</span> users = listOf(user, user.copy(id = <span class="num">2</span>, name = <span class="str">"Bob"</span>))
    <span class="fn">println</span>(json.<span class="fn">encodeToString</span>(users))
}

학습 팁

ignoreUnknownKeys = true를 설정하면 API 응답에 새 필드가 추가돼도 에러 없이 역직렬화됩니다. 실제 프로젝트에서는 기본으로 켜두는 것을 권장합니다.

주의할 점

@Serializable을 빠뜨리면 SerializationException이 런타임에 발생합니다. KAPT/KSP 설정도 함께 필요합니다: plugins { kotlin("plugin.serialization") }

자주 묻는 질문

kotlinx.serialization JSON란 무엇인가요?

Kotlin 공식 직렬화 라이브러리로 data class를 JSON으로 변환합니다.

kotlinx.serialization JSON 학습 시 주의할 점은 무엇인가요?

@Serializable 을 빠뜨리면 SerializationException 이 런타임에 발생합니다. KAPT/KSP 설정도 함께 필요합니다: plugins { kotlin("plugin.serialization") }