Moshi para Kotlin: guía completa con ejemplos prácticos

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

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                    

Recommendations