Trabajo con JSON en Kotlin: análisis y serialización en la práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: por qué JSON es la base del desarrollador moderno de Kotlin

JSON (JavaScript Object Notation) sigue siendo el estándar de facto para el intercambio de datos entre el servidor y el cliente, ya sea una aplicación móvil en Android o un backend en Ktor. En el ecosistema de Kotlin, trabajar con JSON es especialmente cómodo gracias al tipado estricto del lenguaje y a las potentes bibliotecas de serialización. En este artículo, analizaremos dos enfoques principales: el uso de la biblioteca oficial kotlinx.serialization y la popular Gson. Aprenderá a analizar estructuras complejas, serializar objetos y manejar excepciones en la práctica.



Preparación del proyecto y adición de dependencias

Antes de escribir código, es necesario añadir las bibliotecas al archivo build.gradle.kts (para Gradle). Veamos ambas opciones.



Opción 1: kotlinx.serialization (recomendada)

  • Añada el plugin en plugins: kotlin("plugin.serialization") version "1.9.22"
  • En dependencies especifique: implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")


Opción 2: Gson (para compatibilidad con proyectos Java)

  • En dependencies añada: implementation("com.google.code.gson:gson:2.10.1")


// build.gradle.kts — ejemplo completo para kotlinx.serializationplugins {    kotlin("jvm") version "1.9.22"    kotlin("plugin.serialization") version "1.9.22"}

dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}


Análisis de JSON en Kotlin: de lo simple a lo complejo

El análisis (deserialización) es la conversión de una cadena JSON en un objeto Kotlin. Veámoslo con un ejemplo de datos de usuario.



Ejemplo de datos

{  "id": 123,  "name": "Ana",  "email": "ana@example.com",  "active": true}


Creación de la Data Class

Para ambas bibliotecas se utiliza la misma clase. Importante: para kotlinx.serialization es necesario añadir la anotación @Serializable.

import kotlinx.serialization.Serializable

@Serializabledata class User( val id: Int, val name: String, val email: String, val active: Boolean)


Análisis con kotlinx.serialization

import kotlinx.serialization.json.Json

fun parseWithKotlinx(jsonString: String): User { val json = Json { ignoreUnknownKeys = true } // ignoramos campos desconocidos return json.decodeFromString<User>(jsonString)}

// Uso:fun main() { val json = """{"id":123,"name":"Ana","email":"ana@example.com","active":true}""" val user = parseWithKotlinx(json) println(user.name) // Ana}


Análisis con Gson

import com.google.gson.Gson

fun parseWithGson(jsonString: String): User { val gson = Gson() return gson.fromJson(jsonString, User::class.java)}

// Uso:fun main() { val json = """{"id":123,"name":"Ana","email":"ana@example.com","active":true}""" val user = parseWithGson(json) println(user.email) // ana@example.com}


Serialización: convertimos un objeto en JSON

El proceso inverso —crear una cadena JSON a partir de un objeto— es igualmente importante para enviar datos al servidor.



Serialización con kotlinx.serialization

import kotlinx.serialization.encodeToString

fun serializeWithKotlinx(user: User): String { val json = Json { prettyPrint = true } return json.encodeToString(user)}

// Resultado:// {// "id": 123,// "name": "Ana",// "email": "ana@example.com",// "active": true// }


Serialización con Gson

fun serializeWithGson(user: User): String {    val gson = GsonBuilder().setPrettyPrinting().create()    return gson.toJson(user)}<                

Blogs

Book Recommendations