JSON in Kotlin-Datenklassen umwandeln — Numio
Erzeugt Kotlin-Data-Classes aus einem JSON-Beispiel. Ganze Zahlen werden zu Long, Dezimalzahlen zu Double, verschachtelte Objekte erhalten eine eigene Klasse, und Schlüssel, die in einigen Array-Elementen fehlen, werden zu nullable Typen wie Boolean?.
Eine REST-Antwort für eine Android-App modellieren, die JSON mit Jackson parst.
Wann sie hilft
- Eine REST-Antwort für eine Android-App modellieren, die JSON mit Jackson parst.
- DTOs für einen Ktor- oder Spring-Boot-Service aus einem Beispiel-Payload erstellen.
Anwendung
- Füge ein repräsentatives JSON-Objekt oder -Array in den JSON-Editor ein; nimm Array-Elemente auf, die optionale Schlüssel zeigen.
- Lies das Kotlin-Panel: Die oberste Klasse heißt Root, verschachtelte Klassen werden nach ihren Schlüsseln benannt (projects wird zu Project).
- Kopiere die Klassen, benenne Root um und ersetze Any? oder Long, wo dein API-Vertrag etwas anderes vorgibt.
JSON-Eingabe
{
"id": 1024,
"full_name": "Ada Lovelace",
"email": null,
"roles": ["admin", "editor"],
"projects": [
{ "name": "Engine", "stars": 42 },
{ "name": "Notes", "stars": 7, "archived": true }
]
}Kotlin-Data-Classes
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?,
)Details und Einschränkungen
Die Umwandlung läuft in deinem Browser mit dem WebAssembly-Modul json_typegen; das JSON wird nicht hochgeladen. Diese Seite hat keine Einstellungen.
Schlüssel, die nicht camelCase sind, erhalten eine Jackson-Annotation @JsonProperty und den Import com.fasterxml.jackson.annotation.JsonProperty. Annotationen für kotlinx.serialization oder Moshi werden nicht erzeugt.
null-Werte und leere Arrays tragen keine Typinformation und werden daher zu Any? und List<Any?>.
Nullable Felder haben keinen Standardwert (= null). Ergänze Standardwerte selbst, wenn das Feld beim Deserialisieren fehlen kann.
FAQ
Warum ist eine ganze Zahl als Long statt Int typisiert?
Der Generator verwendet für ganze Zahlen immer Long, damit große IDs nicht überlaufen. Zahlen, die für einen 64-Bit-Integer zu groß sind oder mit Dezimalpunkt geschrieben werden, werden zu Double.
Kann ich ein JSON-Array auf oberster Ebene umwandeln?
Ja. Ein Root-Array erzeugt einen typealias, zum Beispiel typealias Root = List<Root2>;, sowie eine data class Root2 für den Elementtyp. Benenne beide passend für deinen Code um.
Warum wurde ein kurzes gemischtes Array zu Pair<Long, String>?
json_typegen behandelt ein kurzes Array mit Elementen unterschiedlicher Typen als Tupel, sodass [1, "a"] zu Pair<Long, String> wird. Ändere es in List<Any>, wenn das Array eigentlich eine Liste ist.