Volver a la página principal
miércoles 11 septiembre 2024
22

Cómo serializar JSON en Kotlin

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.

Configuración de kotlinx.serialization

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

Serializar un objeto a JSON

Una vez configurada la biblioteca, puedes serializar un objeto en Kotlin a JSON utilizando anotaciones y la clase Json.

Ejemplo básico de serialización

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:

  • @Serializable: Anotación que indica que la clase Persona puede ser serializada.
  • Json.encodeToString(): Convierte el objeto persona a una cadena JSON.

Salida:

{"nombre":"Juan","edad":25}

Deserializar un JSON a un objeto Kotlin

La deserialización es el proceso inverso, donde un JSON se convierte en un objeto Kotlin.

Ejemplo de deserialización

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)

Serialización con parámetros opcionales

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.

Configuración personalizada de JSON

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.

Referencia oficial

Para obtener más información sobre la serialización de JSON en Kotlin, consulta la documentación oficial de kotlinx.serialization.

Etiquetas:
kotlin json
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer