Trabajo con JSON en Kotlin: análisis y serialización para principiantes
JSON (JavaScript Object Notation) es el formato de intercambio de datos más popular en las aplicaciones web y API modernas. Si ha comenzado a estudiar Kotlin, tarde o temprano se encontrará con la necesidad de convertir cadenas JSON en objetos de su aplicación (deserialización o análisis) y viceversa (serialización).
En este artículo, analizaremos las principales formas de trabajar con JSON en Kotlin utilizando tres librerías populares: kotlinx.serialization, Gson y Moshi. Aprenderá cómo comenzar rápidamente a analizar JSON y serializar datos sin complicaciones innecesarias.
¿Qué es el análisis y la serialización de JSON?
Antes de pasar al código, definamos los términos:
- Serialización — es el proceso de convertir un objeto (por ejemplo, una clase de datos de Kotlin) en una cadena en formato JSON.
- Análisis (deserialización) — es el proceso inverso: a partir de una cadena JSON obtenemos un objeto de un tipo específico.
La interacción con JSON en Kotlin se puede organizar de varias maneras. No hay soporte integrado para JSON en el lenguaje, por lo que utilizamos librerías de terceros.
Librería kotlinx.serialization (método recomendado)
kotlinx.serialization es la librería oficial de JetBrains que se integra perfectamente con el lenguaje Kotlin. Admite multiplataforma (JVM, JS, Native) y funciona en la etapa de compilación, lo que la hace muy rápida y segura.
Instalación
Agregue el plugin al archivo build.gradle.kts:
plugins { kotlin("plugin.serialization") version "1.9.0"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")}Ejemplo: análisis de JSON
Supongamos que tenemos un JSON con datos de un usuario:
{ "name": "Iván", "age": 28, "email": "ivan@example.com"}Creemos un data class y marquémoslo con la anotación @Serializable:
import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json
@Serializabledata class User( val name: String, val age: Int, val email: String)
fun main() { val jsonString = """ {"name": "Iván", "age": 28, "email": "ivan@example.com"} """.trimIndent()
val user = Json.decodeFromString<User>(jsonString) println(user) // User(name=Iván, age=28, email=ivan@example.com)}Ejemplo: serialización a JSON
fun main() { val user = User(name = "Ana", age = 25, email = "anna@example.com") val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Ana","age":25,"email":"anna@example.com"}}Ventajas: seguridad de tipos, velocidad, ausencia de reflexión, soporte para campos anulables, valores predeterminados y objetos anidados.
Librería Gson (de Google)
Gson es una de las librerías más antiguas y populares para trabajar con JSON en el ecosistema JVM. Es simple de usar, pero utiliza reflexión, lo que la hace un poco más lenta que kotlinx.serialization.
Instalación
dependencies { implementation("com.google.code.gson:gson:2.10.1")}Ejemplo: análisis de JSON
import com.google.gson.Gson
data class Product( val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val jsonString = """{"id": 101, "title": "Portátil", "price": 75000.0}"""
val product = gson.fromJson(jsonString, Product::class.java) println(product) // Product(id=101, title=Portátil, price=75000.0)}Ejemplo: serialización a JSON
fun main() { val product = Product(id = 202, title = "Ratón", price = 2