JSON zu Java-Klasse

Fügen Sie ein JSON-Beispiel ein, und der Generator gibt eine oder mehrere Java-Klassen mit den richtigen Feldtypen, Gettern, Settern und JSON-Bibliotheksannotation aus. Unterstützt Jackson (@JsonProperty), Gson (@SerializedName) und Lombok (@Data/@Builder) für saubereren Code. Verschachtelte Objekte werden je nach gewähltem Layout zu inneren oder Geschwisterklassen.

Wie man JSON in Java konvertiert

  1. 1

    Fügen Sie das JSON ein

    Ein einzelnes Beispiel reicht aus; mehrere Beispiele verbessern die Nullwert-Erkennung.

  2. 2

    Wählen Sie die Bibliothek

    Jackson (am häufigsten in Spring), Gson (Android und einige Legacy-Projekte) oder einfaches POJO ohne Annotationen.

  3. 3

    Wählen Sie Extras

    Lombok für automatisch generierte Getter/Setter, Builder-Muster, equals/hashCode. Oder lassen Sie es einfach.

  4. 4

    Wählen Sie den verschachtelten Stil

    Geschwisterklassen in derselben Datei (Java 17+ öffentliche Klassen müssen separate Dateien sein) oder verschachtelte statische Klassen.

  5. 5

    Kopieren Sie den Code

    In Ihr Projekt einfügen. Klassennamen entsprechen den JSON-Schlüsseln; das Paket wird auf das eingestellt, was Sie konfigurieren.

Beispielausgabe: Jackson + Lombok

Eingabe:

{ "firstName": "Alice", "age": 30, "address": { "city": "Madrid" } }

Ausgabe:

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @JsonProperty("firstName")
    private String firstName;

    @JsonProperty("age")
    private int age;

    @JsonProperty("address")
    private Address address;
}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {
    @JsonProperty("city")
    private String city;
}

Typzuordnung

JSON Java-Typ
Zeichenkette String
Ganzzahl (≤ Integer.MAX) Integer / int
große Ganzzahl Long / BigInteger
Dezimalzahl Double / BigDecimal
Wahrheitswert Boolean / boolean
ISO-Datum LocalDate (Jackson JSR-310)
ISO-Datum und Uhrzeit Instant / OffsetDateTime
null (mit nicht-null Geschwister) Wrapper-Typ (z. B. Integer)
Array List<T>
Objekt Verschachtelte Klasse

Auswahl zwischen Boxed und Primitiv

  • Primitiv (int, long, boolean), nicht-nullbar, effizient, kein Auto-Boxing.
  • Boxed (Integer, Long, Boolean), nullable, erforderlich, wenn das Feld in JSON fehlen oder null sein kann.

Der Generator verwendet standardmäßig Boxed für alles, was als nullable angesehen wird, andernfalls primitiv.

Jackson vs Gson

Funktion Jackson Gson
Verbreitung in Spring Ja, Standard Nein (Konfiguration erforderlich)
Leistung Schneller Langsamer
JSR-310 Datumsunterstützung Über zusätzliches Modul Über zusätzliches Modul
Polymorphismus @JsonTypeInfo RuntimeTypeAdapter
Toleranz für nachgestellte Kommas Nein (standardmäßig) Ja

Häufige Fehler

  • Verwendung primitiver Typen für nullable Felder. int kann nicht null sein; Jackson wird einen Fehler auslösen, wenn das JSON "age": null hat. Verwenden Sie Integer.
  • Fehlende Datums-Module. Jackson benötigt jackson-datatype-jsr310 für Instant/LocalDate. Ohne dies fallen Daten auf String oder Epoch-Zahlen zurück.
  • Teilen von Wrapper-Typen über nicht verwandte Klassen. Wenn zwei JSON-Formate beide eine verschachtelte Address haben, erstellt der Generator zwei Address-Klassen. Manuell umbenennen oder vereinheitlichen.
  • Vergessen von @JsonIgnoreProperties(ignoreUnknown = true). Strenges Jackson löst bei unbekannten Eigenschaften einen Fehler aus; fügen Sie diese Annotation hinzu (oder konfigurieren Sie global), um eine tolerante Deserialisierung zu ermöglichen.

Häufig gestellte Fragen

Jackson in den meisten Fällen, es ist der Standard in Spring, schneller und hat reichhaltigere Polymorphismus-Unterstützung. Gson ist leichter und bekannter in Android, obwohl Android-Projekte zunehmend Moshi oder kotlinx.serialization verwenden.

Lombok reduziert viel Boilerplate (Getter, Setter, equals, hashCode, Builder). Es wird weit verbreitet verwendet, erfordert jedoch den Lombok-Annotationenprozessor in Ihrem Build. Deaktivieren Sie es, wenn Ihr Projekt Lombok aus Gründen der Abhängigkeits-Hygiene vermeidet.

Felder, die in einem beobachteten Beispiel null sind, werden zu Boxed-Typen (Integer anstelle von int), damit sie null halten können. Jackson deserialisiert dann "age": null ohne Fehler. Fügen Sie @JsonInclude(Include.NON_NULL) hinzu, um nulls bei der Serialisierung zu überspringen.

Ja, wenn Sie “record” auswählen. Records sind prägnant, unveränderlich und funktionieren mit Jackson 2.12+. Für Spring Boot 3-Projekte sind Records plus Lombok-freie Generierung die moderne Wahl.

Verwandte Tools

Tool in anderen Sprachen verfügbar