100 % locale — i tuoi dati non lasciano mai il tuo browser

JSON in Kotlin — data class pronte da incollare

Trasforma un campione JSON in data class Kotlin. I nomi restano quelli del JSON, tra backtick dove la lingua lo richiede, pronti da compilare.

Istantaneo Privato Zero cookie

Input JSON

Output Kotlin

Che cosa fa questo strumento

Un campione JSON diventa data class Kotlin, una per oggetto.

{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
data class Root(
    val id: Long,
    val firstName: String,
    val address: Address,
)

data class Address(
    val city: String,
)

Ogni proprietà è un val: un carico decodificato è un valore. Le data class danno equals, hashCode, toString e copy() — quest’ultima è il modo di cambiare un campo senza mutare nulla.

La chiave resta la chiave

Gli identificatori Kotlin si scrivono tra backtick, e tanto basta per tenere una chiave JSON così com’è:

data class Root(
    val `content-type`: String,
    val `class`: Long,
    val `2fa`: Boolean,
)

class è una parola chiave, content-type ha un trattino, 2fa comincia con una cifra — tra backtick nulla di ciò conta. Con kotlinx.serialization il nome della proprietà è il nome JSON: si decodifica così com’è, senza alcuna annotazione.

Con Jackson o Moshi il nome della proprietà è ugualmente ciò che cercano, quindi i nomi tra backtick funzionano anche lì. Solo se decidi di rinominare una proprietà — contentType invece di `content-type` — ti serve @JsonProperty("content-type") o @Json(name = "content-type") per tornare a puntare alla chiave.

I tipi, e il ? che non c’è

  • Gli interi diventano Long e i decimali Double, ciò che un numero JSON regge senza discussioni.
  • null e i valori ignoti diventano Any? — l’unico posto dove compare un punto interrogativo, perché è l’unico in cui il campione ne mostrava uno.
  • Un array vuoto o misto diventa List<Any>.

Nient’altro è annullabile e nulla ha un valore predefinito. Un campo a volte assente è un ? e un = null che aggiungi tu, quando un secondo carico ti avrà detto ciò che questo non poteva.

Due chiavi, due proprietà

Due chiavi che colliderebbero come nomi di proprietà restano distinte invece di fondersi: la seconda prende un suffisso numerato. Poiché il nome tra backtick è il nome JSON, qui le collisioni sono rare: capitano solo quando una riparazione è inevitabile.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

Perché la mia proprietà si chiama `` `content-type` `` con i backtick?
Perché Kotlin accetta qualsiasi identificatore tra backtick, ed è così che si tiene la chiave JSON come nome di proprietà. Con kotlinx.serialization il nome della proprietà *è* il nome JSON: non serve altro. Con Jackson o Moshi lo stesso risultato richiede un’annotazione — `@JsonProperty` o `@Json(name = …)` — aggiunta a mano.
I campi dovrebbero essere `val` o `var`?
`val`, perché un carico decodificato è un valore, non un modulo. Rendere tutto mutabile invita a codice che modifica l’oggetto sul posto e poi si chiede quale versione stia guardando. Dove serve davvero modificare, `copy()` restituisce una nuova istanza con un campo cambiato — l’idioma per cui le data class esistono.
Perché nessun valore predefinito?
Perché un default è un’affermazione su che cosa significhi una chiave mancante, e un campione non mostra mai una chiave mancante. Un `= null` trasformerebbe «assente» in «null» per tutta la base di codice. Aggiungerlo è una parola quando conosci l’API; indovinarlo è una decisione che nessuno ha chiesto a questo strumento.

Convertitori correlati