Generador de data class Kotlin desde JSON

Pega una respuesta de API en JSON y obtén sus data class de Kotlin. Las clases sin anotaciones sirven para Gson, Moshi o Jackson; la opción kotlinx.serialization añade @Serializable a cada clase y @SerialName donde la clave no es un nombre camelCase.

Anotaciones

Funciona en tu navegador: nada de lo que escribes se envía a ningún sitio.

Cómo se usa

  1. Pega un ejemplo de JSON, mejor con varios elementos en cada array para encontrar las claves opcionales.
  2. Elige data class sin anotaciones o con anotaciones de kotlinx.serialization.
  3. Copia el código a un archivo .kt y renombra Root y las demás clases según tu proyecto.

Cómo funciona

El ejemplo se convierte en una «forma»: cada clave con todos los tipos que aparecen en ella, y todos los objetos de un array fusionados en una clase.

  • Los nombres de clase salen de las claves: items contiene List, line_items una List. Root va primero.
  • Las propiedades son val, una por línea, con coma final (Kotlin 1.4+).
  • Con kotlinx.serialization se importan Serializable, SerialName y JsonElement solo cuando hacen falta.
  • Un array de nivel superior da un typealias, por ejemplo typealias Root = List.

Ejemplo

{"line_items":[{"sku":"A","note":null,"qty":1},{"sku":"B","note":"x"}]} con kotlinx.serialization da:

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Root(
    @SerialName("line_items")
    val lineItems: List<LineItem>,
)

@Serializable
data class LineItem(
    val sku: String,
    val note: String?,
    val qty: Long? = null,
)

Consejos

  • Decodifica con Json.decodeFromString<Root>(text); añade Json { ignoreUnknownKeys = true } si los datos reales tienen más claves que el ejemplo.
  • Cambia Long por Int donde sepas que los valores son pequeños.
  • En proyectos Android con Gson, elige Sin anotaciones y cambia los comentarios por @SerializedName.

Preguntas frecuentes

¿Cómo se traducen los tipos de JSON a Kotlin?

Las cadenas pasan a String, true y false a Boolean, los enteros a Long y los demás números a Double (una mezcla da Double). Los arrays pasan a List<T> y los objetos a data class propias. Un lugar con valores de distinto tipo pasa a Any? sin anotaciones y a JsonElement? con kotlinx.serialization.

¿Qué diferencia hay entre String? y String? = null?

Un valor que es null en el ejemplo recibe String?: la clave debe estar, aunque valga null. Una clave que falta en algunos objetos de un array recibe String? = null, así la decodificación funciona sin ella; kotlinx.serialization necesita ese valor por defecto.

¿Qué pasa con claves como order_id o in?

Las propiedades van en camelCase: order_id pasa a orderId. Con kotlinx.serialization la clave original va en @SerialName("order_id"); sin anotaciones, un comentario la conserva y puedes añadir la anotación de tu librería (@SerializedName en Gson, @Json en Moshi). Una palabra reservada de Kotlin, como in, se escribe entre comillas invertidas.

¿Por qué un objeto vacío pasa a ser una clase normal?

Una data class necesita al menos una propiedad en su constructor, así que un objeto sin claves pasa a class Meta (o @Serializable class Meta).

Más en Desarrollo

Todas las herramientas de la categoría: Desarrollo ·Actualizado el 4 de noviembre de 2026

Opciones de privacidad

Google Analytics nos muestra qué herramientas se usan y si funcionan. Puede usar cookies. Tu elección se guarda en este navegador.