100 % lokal — Ihre Daten verlassen nie Ihren Browser

JSON in Kotlin — Data-Klassen zum Einfügen

Ein JSON-Beispiel in Kotlin-Data-Klassen verwandeln. Die Namen bleiben, wie das JSON sie schrieb, in Backticks wo nötig — fertig zum Kompilieren.

Sofort Privat Null Cookies

JSON-Eingabe

Kotlin-Ausgabe

Was dieses Werkzeug tut

Aus einer JSON-Probe werden Kotlin-Data-Classes, eine je Objekt.

{ "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,
)

Jede Eigenschaft ist ein val: eine dekodierte Nutzlast ist ein Wert. Data Classes bringen equals, hashCode, toString und copy() mit — Letzteres ist, wie Sie ein Feld ändern, ohne etwas zu mutieren.

Der Schlüssel bleibt der Schlüssel

Kotlin-Bezeichner lassen sich in Backticks schreiben, und das genügt, um einen JSON-Schlüssel unverändert zu behalten:

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

class ist ein Schlüsselwort, content-type trägt einen Bindestrich, 2fa beginnt mit einer Ziffer — zwischen Backticks zählt nichts davon. Mit kotlinx.serialization ist der Eigenschaftsname der JSON-Name, das dekodiert also so, wie es dasteht, ganz ohne Annotation.

Mit Jackson oder Moshi ist der Eigenschaftsname ebenfalls das Gesuchte, die Backtick-Namen funktionieren dort also auch. Erst wenn Sie eine Eigenschaft umbenennen — contentType statt `content-type` — brauchen Sie @JsonProperty("content-type") oder @Json(name = "content-type"), um wieder auf den Schlüssel zu zeigen.

Typen, und das ?, das nicht da ist

  • Ganzzahlen werden Long, Dezimalzahlen Double — was eine JSON-Zahl ohne Diskussion trägt.
  • null und unbekannte Werte werden Any? — die einzige Stelle mit einem Fragezeichen, weil es die einzige ist, an der die Probe eines zeigte.
  • Ein leeres oder gemischtes Array wird List<Any>.

Sonst ist nichts nullbar und nichts hat einen Vorgabewert. Ein manchmal fehlendes Feld ist ein ? und ein = null, das Sie ergänzen, sobald eine zweite Nutzlast Ihnen gesagt hat, was diese nicht konnte.

Zwei Schlüssel, zwei Eigenschaften

Zwei Schlüssel, die als Eigenschaftsnamen kollidieren würden, werden getrennt gehalten statt verschmolzen: der zweite bekommt ein nummeriertes Suffix. Da der Backtick-Name der JSON-Name ist, sind Kollisionen hier selten — sie treten nur auf, wenn eine Reparatur unvermeidlich ist.

Datenschutz ab Werk

Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.

Häufige Fragen

Warum heißt meine Eigenschaft `` `content-type` `` mit Backticks?
Weil Kotlin zwischen Backticks jeden Bezeichner zulässt, und das der Weg ist, den JSON-Schlüssel als Eigenschaftsnamen zu behalten. Mit kotlinx.serialization *ist* der Eigenschaftsname der JSON-Name, mehr braucht es nicht. Mit Jackson oder Moshi verlangt dasselbe Ergebnis eine von Hand ergänzte Annotation — `@JsonProperty` oder `@Json(name = …)`.
Sollten die Felder `val` oder `var` sein?
`val`, denn eine dekodierte Nutzlast ist ein Wert, kein Formular. Alles veränderlich zu machen lädt zu Code ein, der das Objekt an Ort und Stelle ändert und sich dann fragt, welche Fassung er gerade ansieht. Wo Sie wirklich ändern müssen, gibt `copy()` eine neue Instanz mit einem geänderten Feld — das Idiom, für das es Data Classes gibt.
Warum keine Vorgabewerte?
Weil ein Vorgabewert eine Aussage darüber ist, was ein fehlender Schlüssel bedeutet, und eine Probe nie einen fehlenden Schlüssel zeigt. Ein `= null` machte aus „fehlt“ ein „null“ für die ganze Codebasis. Es zu ergänzen ist ein Wort, sobald Sie die API kennen; es zu raten ist eine Entscheidung, um die niemand dieses Werkzeug gebeten hat.

Ähnliche Konverter