Kotlin

JSON Annotations — Rename, Default, Optional

admin by @admin ADMIN
Jun 16, 2026
Jun 1, 2026
Public
0 0 up · 0 down Sign in to vote
Per-field annotations let you map Kotlin camelCase ↔ JSON snake_case, set defaults for missing fields, and skip nulls.
Kotlin
Raw
import kotlinx.serialization.*
import kotlinx.serialization.json.*

@Serializable
data class ApiUser(
    @SerialName("user_id")     val userId: Long,
    @SerialName("display_name") val displayName: String,
    @SerialName("created_at")   val createdAt: String,
    val email: String? = null,                   // optional — default null
    val roles: List<String> = emptyList(),       // optional — default empty
    @Transient val passwordHash: String = "",    // NEVER serialized
)

val json = Json {
    encodeDefaults    = false           // omit fields equal to their default
    explicitNulls     = false           // omit null fields in output
    ignoreUnknownKeys = true            // server may add fields we don't care about
}

fun main() {
    val u = ApiUser(userId = 1, displayName = "Alice", createdAt = "2025-03-12")
    println(json.encodeToString(u))
    // {"user_id":1,"display_name":"Alice","created_at":"2025-03-12"}

    val incoming = """{"user_id":2,"display_name":"Bob","created_at":"2025-03-12","unknown_field":"ignored"}"""
    val parsed: ApiUser = json.decodeFromString(incoming)
    println(parsed)                              // ApiUser(userId=2, ...)
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.