Introducción: por qué JSON en Kotlin es dolor y alegría al mismo tiempo
\nSi alguna vez has escrito para Android o backend en Kotlin, seguramente te has encontrado con JSON. Es como el aire para el desarrollador moderno: APIs, configuraciones, bases de datos, todo habla este idioma. Pero he aquí la paradoja: la pregunta "How to parse JSON in Kotlin?" en Stack Overflow acumula miles de visitas cada mes. ¿Por qué? Porque en Kotlin, a diferencia de Java, existe null safety, y las bibliotecas antiguas como Gson empiezan a "comportarse de forma extraña".
\nEn este tutorial analizaremos el parsing JSON en Kotlin de lo simple a lo complejo. Aprenderás a trabajar con Kotlinx Serialization, Moshi y el clásico Gson. Escribiremos código real que puedes copiar directamente a tu proyecto. ¡Vamos allá!
\n\n\n\n
¿Qué es JSON y por qué Kotlin no se lleva bien con él de inmediato?
\nJSON (JavaScript Object Notation) es un formato de texto para el intercambio de datos. Se ve más o menos así:
\n{\n "name": "Kotlin",\n "year": 2011,\n "features": ["null safety", "coroutines"]\n}\nParece sencillo, ¿qué podría salir mal? Pero en Kotlin existe un tipado estricto y null safety. Cuando parseas JSON, debes indicar explícitamente qué campos pueden ser null y cuáles son obligatorios. Si la biblioteca no lo tiene en cuenta, obtendrás un NullPointerException o errores extraños.
Por eso, elegir la biblioteca correcta para el parsing JSON en Kotlin no es solo "cuestión de gustos", sino un tema de estabilidad del proyecto.
\n\nTop 3 bibliotecas para parsing JSON en Kotlin
\nAnalizaremos tres enfoques principales. Cada uno tiene sus ventajas y desventajas.
\n- \n
- Kotlinx Serialization — la biblioteca oficial de JetBrains. La mejor integración con el lenguaje. \n
- Moshi — una biblioteca moderna de Square. Funciona tanto con Java como con Kotlin. \n
- Gson — el viejo y querido estándar. Sigue siendo popular, pero requiere precaución con Kotlin. \n
1. Kotlinx Serialization — la elección de los expertos
\nEsta es la biblioteca nativa para Kotlin. Utiliza generación de código y soporta completamente null safety. Si estás escribiendo un proyecto nuevo en Kotlin, esta es tu opción.
\nInstalación: Agrega el plugin en build.gradle.kts:
plugins {\n kotlin("plugin.serialization") version "1.9.0"\n}\n\ndependencies {\n implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")\n}\nEjemplo de código:
\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n val name: String,\n val year: Int,\n val features: List<String>\n)\n\nfun main() {\n val jsonString = """\n {\n "name": "Kotlin",\n "year": 2011,\n "features": ["null safety", "coroutines"]\n }\n """.trimIndent()\n\n val user = Json.decodeFromString<User>(jsonString)\n println(user.name) // Kotlin\n println(user.features[0]) // null safety\n}\nObserva: Kotlinx Serialization detecta automáticamente los tipos. Si un campo falta en el JSON y en el data class no está marcado como nullable, obtendrás una excepción. Esto es bueno: no pasarás por alto el error.
2. Moshi — flexible y rápido
\nMoshi es una biblioteca de Square, creada teniendo en cuenta Kotlin. También soporta generación de código y null safety. A diferencia de Gson, Moshi no usa reflexión por defecto, lo que la hace más rápida.
\nInstalación:
\ndependencies {\n implementation("com.squareup.moshi:moshi-kotlin:1.15.0")\n ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")\n}\nEjemplo de código:
\nim