Trabajo con JSON en Kotlin: análisis y serialización para principiantes

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é Kotlin sabe trabajar con JSON?

\n\n

JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos que se ha convertido en el estándar para aplicaciones web modernas y APIs. Si programas en Kotlin, ya sea para una aplicación Android o para el backend, tarde o temprano tendrás que analizar respuestas JSON del servidor o serializar tus objetos para enviarlos.

\n\n

Kotlin es un lenguaje moderno que funciona sobre la JVM y es completamente compatible con Java. Sin embargo, Kotlin tiene sus propias herramientas potentes para trabajar con JSON, que hacen que el código sea más conciso y seguro. En este artículo, analizaremos dos de los enfoques más populares: el uso de la biblioteca oficial kotlinx.serialization y el probado Gson.

\n\n

El artículo está dirigido a principiantes. Empezaremos con el análisis simple de una cadena, luego pasaremos a la creación de estructuras anidadas complejas y, al final, abordaremos la serialización: la conversión de tus objetos de vuelta a JSON.

\n\n

1. Preparación del proyecto: dependencias e imports

\n\n

Antes de escribir código, necesitas agregar las bibliotecas. Consideraremos dos opciones.

\n\n

1.1. Instalación de kotlinx.serialization

\n\n

Esta es la solución oficial de JetBrains. Agrega al archivo build.gradle.kts:

\n\n
plugins {\n    kotlin("jvm") version "1.9.0"\n    kotlin("plugin.serialization") version "1.9.0"\n}\n\ndependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")\n}\n
\n\n

1.2. Instalación de Gson

\n\n

Gson es una biblioteca de Google. Es más fácil de configurar, pero requiere más trabajo manual:

\n\n
dependencies {\n    implementation("com.google.code.gson:gson:2.10.1")\n}\n
\n\n

Después de sincronizar el proyecto, puedes escribir código.

\n\n

2. Análisis de JSON en Kotlin con kotlinx.serialization

\n\n

Este enfoque es el "más kotliniano". Declaras clases de datos y agregas la anotación @Serializable. La biblioteca generará automáticamente el código para el análisis.

\n\n

2.1. Ejemplo simple: datos de usuario

\n\n

Supongamos que tenemos una cadena JSON:

\n\n
{\n    "name": "Ana",\n    "age": 25,\n    "email": "anna@example.com"\n}\n
\n\n

Creamos el modelo:

\n\n
import kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n    val name: String,\n    val age: Int,\n    val email: String\n)\n\nfun main() {\n    val jsonString = """\n        {\n            "name": "Ana",\n            "age": 25,\n            "email": "anna@example.com"\n        }\n    """.trimIndent()\n\n    val user = Json.decodeFromString<User>(jsonString)\n    println("Nombre: ${user.name}, Edad: ${user.age}")\n}\n
\n\n

Como puedes ver, no hay mapeos manuales, todo es automático.

\n\n

2.2. Trabajo con listas y objetos anidados

\n\n

Las APIs reales a menudo devuelven arrays. Agreguemos el campo address:

\n\n
@Serializable\ndata class Address(\n    val city: String,\n    val street: String\n)\n\n@Serializable\ndata class UserWithAddress(\n    val name: String,\n    val age: Int,\n    val address: Address\n)\n\nfun main() {\n    val jsonArray = """\n        [\n            {"name": "Iván", "age": 30, "address": {"city": "Moscú", "street": "Tverskaya"}},\n            {"name": "María", "age": 22, "address": {"city": "SPb", "street": "Nevsky"}}\n        ]\n    """.trimIndent()\n\n    val users = Json.decodeFromString<List<UserWithAddress>>(jsonArray)\n    users.forEach { println("${it.name} vive en ${it.address.city}") }\n}\n
\n\n

Observa: para trabajar con listas se usa el genérico List<UserWithAddress>.

\n\n

3. Análisis de JSON con Gson

\n\n

Gson es una biblioteca clásica de Java. También funciona muy bien en Kotlin, pero requiere un poco más de código.

\n\n

3.1. Análisis básico

\n\n
import com.google.gson.Gson\n\ndata cl                

Blogs

Book Recommendations