Manejo de JSON en Kotlin: guía completa
JSON (JavaScript Object Notation) sigue siendo uno de los formatos de intercambio de datos más populares en desarrollo web, aplicaciones móviles y microservicios. Kotlin, como lenguaje moderno para JVM, Android y proyectos multiplataforma, ofrece varias herramientas potentes para trabajar con JSON. En este artículo, analizaremos en detalle las principales bibliotecas, sus capacidades y las mejores prácticas.
¿Por qué necesitas una biblioteca para JSON en Kotlin?
Aunque Kotlin funciona en JVM y puede usar bibliotecas de Java, las soluciones nativas de Kotlin (por ejemplo, kotlinx.serialization) proporcionan:
- Seguridad de tipos en tiempo de compilación
- Soporte para data-classes y sealed-classes
- Multiplataforma (KMP)
- Código boilerplate mínimo
Bibliotecas principales para trabajar con JSON en Kotlin
1. kotlinx.serialization (recomendada)
Esta es la biblioteca oficial de JetBrains, integrada en el ecosistema de Kotlin. Soporta multiplataforma y no requiere reflexión.
Configuración (Gradle):
plugins { kotlin("jvm") version "1.9.22" kotlin("plugin.serialization") version "1.9.22"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Ejemplo de análisis JSON:
import kotlinx.serialization.*import kotlinx.serialization.json.*
@Serializabledata class User( val id: Int, val name: String, val email: String, @SerialName("is_active") val isActive: Boolean = false)
fun main() { val jsonString = """ { "id": 1, "name": "Иван Петров", "email": "ivan@example.com", "is_active": true } """.trimIndent()
val user = Json.decodeFromString<User>(jsonString) println("Usuario: ${user.name}, activo: ${user.isActive}")
// Serialización de vuelta a JSON val jsonOutput = Json.encodeToString(user) println(jsonOutput)}2. Gson (de Google)
Biblioteca Java popular que se adapta fácilmente a Kotlin. Adecuada para proyectos simples sin multiplataforma.
Ejemplo:
import com.google.gson.Gsonimport com.google.gson.annotations.SerializedName
data class Product( @SerializedName("product_id") val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val json = """{"product_id": 101, "title": "Ноутбук", "price": 79999.99}""" val product = gson.fromJson(json, Product::class.java) println("Producto: ${product.title}, precio: ${product.price} руб.") // Serialización inversa val jsonOut = gson.toJson(product) println(jsonOut)}3. Moshi (de Square)
Alternativa moderna a Gson con mejor rendimiento y soporte para generación de código Kotlin.
Ejemplo:
import com.squareup.moshi.Moshiimport com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactoryimport com.squareup.moshi.adapters.PolymorphicJsonAdapterFactory
data class Book( val isbn: String, val author: String, val year: Int)
fun main() { val moshi = Moshi.Builder() .add(KotlinJsonAdapterFactory()) .build() val adapter = moshi.adapter(Book::class.java) val json = """{"isbn": "978-5-17-123456-7", "author": "Лев Толстой", "year": 1877}""" val book = adapter.fromJson(json) println("Libro: ${book?.author} - ISBN: ${book?.isbn}")}Comparación de bibliotecas
- kotlinx.serialization — la mejor opción para proyectos nuevos, multiplataforma y Android. Requiere un plugin del compilador.
- Gson — fácil de usar, adecuado para prototipos rápidos