Kotlin facilita la serialización y deserialización de objetos a JSON mediante la biblioteca kotlinx.serialization
. Esta biblioteca permite convertir objetos Kotlin a JSON y viceversa, de manera eficiente y con una sintaxis clara. Antes de usarla, es necesario agregar la dependencia al proyecto.
Para usar kotlinx.serialization
, primero debes agregar las siguientes dependencias en tu archivo build.gradle
(para proyectos Gradle):
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1"
Luego, asegúrate de habilitar el complemento de serialización en el archivo build.gradle
:
plugins {
id 'kotlinx-serialization'
}
Una vez configurada la biblioteca, puedes serializar un objeto en Kotlin a JSON utilizando anotaciones y la clase Json
.
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class Persona(val nombre: String, val edad: Int)
fun main() {
val persona = Persona("Juan", 25)
val jsonString = Json.encodeToString(persona)
println(jsonString)
}
En este ejemplo:
Persona
puede ser serializada.
Json.encodeToString()
: Convierte el objeto persona
a una cadena JSON.
Salida:
{"nombre":"Juan","edad":25}
La deserialización es el proceso inverso, donde un JSON se convierte en un objeto Kotlin.
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class Persona(val nombre: String, val edad: Int)
fun main() {
val jsonString = """{"nombre":"Juan","edad":25}"""
val persona = Json.decodeFromString<Persona>(jsonString)
println(persona)
}
En este ejemplo:
Json.decodeFromString()
: Convierte el JSON en un objeto Kotlin del tipo especificado (Persona
en este caso).
Salida:
Persona(nombre=Juan, edad=25)
Puedes definir valores predeterminados para los parámetros de una clase, y la serialización ignorará aquellos valores que coincidan con los predeterminados.
@Serializable
data class Persona(val nombre: String, val edad: Int = 18)
fun main() {
val persona = Persona("Ana")
val jsonString = Json.encodeToString(persona)
println(jsonString)
}
Salida:
{"nombre":"Ana"}
El campo edad
no aparece en el JSON ya que coincide con el valor predeterminado.
Puedes personalizar cómo se maneja la serialización con opciones adicionales como la omisión de valores nulos o el manejo de nombres de campos en diferentes formatos (snake_case, camelCase).
val json = Json {
prettyPrint = true
isLenient = true
ignoreUnknownKeys = true
}
prettyPrint
: Formatea el JSON de forma más legible.
ignoreUnknownKeys
: Ignora los campos desconocidos en el JSON al deserializar.
Para obtener más información sobre la serialización de JSON en Kotlin, consulta la documentación oficial de kotlinx.serialization.
Jorge García
Fullstack developer