Vai al contenuto

Conversione di classi di dati da JSON a Kotlin — Numio

Genera classi di dati Kotlin da un campione JSON. Gli interi diventano Long, i decimali Double, gli oggetti annidati ottengono la propria classe e le chiavi mancanti in alcuni elementi dell'array diventano tipi nullable come Boolean?.

Modellazione di una risposta REST per un'app Android che analizza JSON con Jackson.

JSON

Quando usarlo

  • Modellazione di una risposta REST per un'app Android che analizza JSON con Jackson.
  • Creazione di DTO per un servizio Ktor o Spring Boot da un payload di esempio.

Come si usa

  1. Incolla un oggetto o un array JSON rappresentativo nell'editor JSON; includere elementi dell'array che mostrano chiavi opzionali.
  2. Leggi il pannello Kotlin: la classe di livello superiore si chiama Root e le classi nidificate prendono il nome dalle loro chiavi (i progetti diventano Project).
  3. Copia le classi, rinomina Root e sostituisci Any? o Long dove il tuo contratto API dice diversamente.

Ingresso JSON

{
  "id": 1024,
  "full_name": "Ada Lovelace",
  "email": null,
  "roles": ["admin", "editor"],
  "projects": [
    { "name": "Engine", "stars": 42 },
    { "name": "Notes", "stars": 7, "archived": true }
  ]
}

Classi di dati Kotlin

import com.fasterxml.jackson.annotation.JsonProperty

data class Root(
    val id: Long,
    @JsonProperty("full_name")
    val fullName: String,
    val email: Any?,
    val roles: List<String>,
    val projects: List<Project>,
)

data class Project(
    val name: String,
    val stars: Long,
    val archived: Boolean?,
)

Dettagli e limiti

La conversione viene eseguita nel tuo browser con il modulo json_typegen WebAssembly; lo JSON non è caricato. Non ci sono impostazioni in questa pagina.

Le chiavi che non sono camelCase ricevono un'annotazione Jackson @JsonProperty e l'importazione com.fasterxml.jackson.annotation.JsonProperty. Le annotazioni kotlinx.serialization o Moshi non vengono generate.

i valori null e gli array vuoti non contengono informazioni sul tipo, quindi diventano Any? e Elenco<Any?>.

I campi nullallabili non hanno un valore predefinito (= null). Aggiungi tu stesso i valori predefiniti se il campo può essere assente durante la deserializzazione.

FAQ

Perché un numero intero viene digitato come Long anziché Int?

Il generatore utilizza sempre Long per i numeri interi in modo che gli ID grandi non trabocchino. I numeri troppo grandi per un numero intero a 64 bit o scritti con un punto decimale diventano Double.

Posso convertire un array JSON alla radice?

Sì. Un array root produce un typealias, ad esempio typealias Root = List<Root2>;, più una classe di dati Root2 per il tipo di elemento. Rinominali entrambi per adattarli al tuo codice.

Perché un array misto corto è diventato Pair<Long, String>?

json_typegen tratta un array breve i cui elementi hanno tipi diversi come una tupla, quindi [1, "a"] diventa Pair<Long, String>. Cambialo in List<Any> se l'array è davvero una lista.

Specifiche e riferimenti