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.
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
- Incolla un oggetto o un array JSON rappresentativo nell'editor JSON; includere elementi dell'array che mostrano chiavi opzionali.
- 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).
- 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.