Moshi para Kotlin: guía completa con ejemplos prácticos
1. ¿Qué es Moshi y por qué usarla?
Moshi es una librería moderna para serialización y deserialización de JSON, desarrollada por Square. Está escrita en Kotlin y Java, pero está principalmente orientada a desarrolladores Kotlin. Moshi ofrece una forma potente, segura y eficiente de convertir objetos a JSON y viceversa, con una cantidad mínima de código repetitivo.
¿Para qué sirve Moshi? En el desarrollo de aplicaciones actual, trabajar con JSON es esencial: intercambio de datos con APIs REST, almacenamiento de configuraciones, comunicación entre componentes. Moshi resuelve varias tareas clave: conversión automática de clases Kotlin a JSON (y viceversa) sin necesidad de escribir analizadores manualmente; tipado estricto que previene errores en tiempo de ejecución; soporte para objetos inmutables (data class) y clases selladas; posibilidad de personalización mediante adaptadores. En comparación con Gson o Jackson, Moshi ofrece una API más limpia, mejor integración con Kotlin (como soporte para null-safety y valores predeterminados) y un tamaño de librería más reducido.
Moshi es especialmente útil en proyectos donde el rendimiento y la seguridad de tipos son importantes. Se usa activamente en desarrollo Android (incluso en combinación con Retrofit y OkHttp), en aplicaciones de servidor con Ktor, y en cualquier proyecto Kotlin que requiera trabajar con JSON. La librería soporta reflexión (a través del módulo moshi-kotlin) y generación de código (mediante moshi-kotlin-codegen), lo que permite elegir entre comodidad y rendimiento.
2. Instalación
Moshi se distribuye a través de Maven Central. Para instalarlo, agrega las dependencias en tu archivo build.gradle.kts (Gradle) o pom.xml (Maven).
Gradle (Kotlin DSL)
// build.gradle.kts
dependencies {
// Librería principal
implementation("com.squareup.moshi:moshi:1.15.1")
// Módulo para Kotlin (reflexión)
implementation("com.squareup.moshi:moshi-kotlin:1.15.1")
// Generación de código (opcional, para mejorar rendimiento)
ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.1")
// o kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.1")
}
Gradle (Groovy)
// build.gradle
dependencies {
implementation 'com.squareup.moshi:moshi:1.15.1'
implementation 'com.squareup.moshi:moshi-kotlin:1.15.1'
ksp 'com.squareup.moshi:moshi-kotlin-codegen:1.15.1'
}
Maven
<dependency>
<groupId>com.squareup.moshi</groupId>
<artifactId>moshi</artifactId>
<version>1.15.1</version>
</dependency>
<dependency>
<groupId>com.squareup.moshi</groupId>
<artifactId>moshi-kotlin</artifactId>
<version>1.15.1</version>
</dependency>
Importante: Si usas generación de código, no olvides agregar el plugin KSP (Kotlin Symbol Processing) o KAPT. Para KSP, añade en plugins:
plugins {
id("com.google.devtools.ksp") version "1.9.22-1.0.17"
}
3. Inicio rápido
Un ejemplo mínimo funcional demuestra la serialización y deserialización básica.
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
// 1. Definimos un data class
data class Usuario(
val nombre: String,
val edad: Int,
val correo: String?
)
fun main() {
// 2. Creamos una instancia de Moshi con la fábrica para Kotlin
val moshi = Mosh También en la biblioteca
Trabajo con Excel en TypeScript: bibliotecas, ejemplos y herramientas
Geolocalización y mapas en Kotlin: Guía completa de integración
node-schedule — planificador de tareas para TypeScript
Caché en Rust: Redis, Memcached y soluciones integradas