araç köşesi

JSON in Java-Klasse (POJO)

Aus Beispiel-JSON eine kompilierbare Java-Klasse erzeugen; verschachtelte Objekte werden eigene Klassen, fehlende Felder Wrapper-Typen

Ihre Daten bleiben bei Ihnen. Die Umwandlung läuft im Browser; nichts wird an einen Server gesendet.

So funktioniert es

Um die Antwort einer REST-API in Java als Objekt zu lesen, brauchen Sie zuerst Klassen, die zum JSON passen; von Hand wird das mit jedem Feld länger und fehleranfälliger. Fügen Sie eine Beispielantwort links ein und geben Sie einen Namen für die Wurzelklasse ein (etwa Bestellung); der Java-Code erscheint rechts. Jedes verschachtelte Objekt wird eine eigene Klasse und steht als public static class in der Wurzelklasse, sodass die Ausgabe als eine einzige Datei Bestellung.java kompiliert. Ein Array aus Objekten wird List<...>; die Elementklasse heißt wie die Einzahl des Array-Namens: "items" → Item. Bei deutschen Pluralformen wie "positionen" greift diese Regel nicht, dann heißt die Klasse PositionenItem — benennen Sie sie bei Bedarf um. Alle Einträge eines Arrays werden zu einem Typ zusammengeführt: Ein Feld, das in einem Eintrag fehlt, steht trotzdem in der Klasse, aber als Wrapper-Typ wie Integer, Double oder Boolean, damit es null aufnehmen kann. Ganze Zahlen werden int, über etwa 2 Milliarden long, Dezimalzahlen double; der Typ wird aus der Schreibweise im JSON gelesen, 59.0 bleibt double. Ein Schlüssel wie "kunden_name" wird zum Feld kundenName, und @JsonProperty("kunden_name") sorgt dafür, dass Jackson ihn zuordnet.

Dieses Werkzeug ist auch als json in java klasse umwandeln, json to java, json to pojo, java klasse aus json erzeugen, json in java record bekannt.

Was ist POJO?

Ein POJO (Plain Old Java Object) ist eine schlichte Java-Klasse ohne Bindung an ein Framework: private Felder, ein parameterloser Konstruktor und Getter/Setter für die Felder. Jackson, Gson und Spring erwarten genau diese Form, wenn sie JSON in Java-Objekte umwandeln, und ordnen Feldnamen den JSON-Schlüsseln zu. Deshalb schreibt man beim Anbinden einer API aus Java meist zuerst die POJOs ihrer Antworten.

Was ist Java-Record?

Ein Record ist eine mit Java 16 eingeführte Kurzform einer Klasse, die nur Daten trägt: Die Zeile record Position(String artikel, int menge) {} erzeugt Felder, Konstruktor, Zugriffsmethoden, equals und hashCode automatisch. Records sind unveränderlich; ihre Felder lassen sich nach dem Erzeugen nicht ändern. Jackson liest Records seit Version 2.12 direkt. Sie passen zu API-Antworten, die gelesen und angezeigt werden.

Was ist der Unterschied zwischen POJO und Record in Java?

Ein POJO ist die klassische Klasse mit eigenem Getter und Setter je Feld: lang, aber auf jeder Java-Version lauffähig, und das Objekt lässt sich nach dem Lesen ändern. Ein Record beschreibt dieselben Daten in einer Zeile; Zugriffsmethoden, equals, hashCode und toString erzeugt der Compiler. Er braucht Java 16 oder neuer und ist unveränderlich. Jackson liest beide (Records ab 2.12). Für Code, der eine API-Antwort liest und anzeigt, genügt ein Record mit weniger Zeilen; wird das Objekt bearbeitet und zurückgesendet, nehmen Sie ein POJO.

Wie die Typen ermittelt werden: Zusammenführen, Wrapper-Typen, Namen

Das Werkzeug schließt aus einem einzigen Beispiel; je mehr Varianten Ihr Beispiel zeigt, desto genauer die Klasse. Einträge eines Arrays werden zu einem Typ zusammengeführt: Hat die erste Position einen Rabatt und die zweite nicht, steht rabatt trotzdem in der Klasse, aber als Double statt double, weil Jackson ein fehlendes Feld auf null setzt und ein primitives double kein null aufnehmen kann. Ein Feld, das null war, wird ebenfalls Wrapper-Typ; ein Feld, das nur null war, hat keinen erkennbaren Typ und wird Object.

Zeigt ein Feld verschiedene Typen (in einem Eintrag Zahl, im anderen Text), ist der gemeinsame Typ Object; ein leeres Array wird List<Object>. Reservierte Java-Wörter wie class oder default können keine Feldnamen sein; sie bekommen einen Unterstrich, und der Originalname bleibt per @JsonProperty. Kollidiert ein aus einem Schlüssel gebildeter Klassenname mit einem Java-Typ wie String oder List, wird eine 2 angehängt.

  • [{"a":1},{"b":2}] → Integer a; Integer b; (jeweils in einem Datensatz fehlend)
  • {"hinweis": null} → Object hinweis (Typ unbekannt)
  • {"summe": 59.0} → double (das .0 im JSON zählt)
  • {"kunden_name": "x"} → @JsonProperty("kunden_name") String kundenName

Klasse oder Record, und ehrliche Grenzen

Der Klassenstil läuft auf jeder Java-Version und mit den Standardeinstellungen von Jackson, Gson und Spring: private Felder plus Getter und Setter je Feld; der Getter eines boolean heißt isX. Records gibt es seit Java 16: Die Felder sind Konstruktorparameter, der Typ ist unveränderlich, und Jackson ab 2.12 liest ihn direkt. Wählen Sie die Klasse, wenn Ihr Team eine ältere Java-Version nutzt oder Sie das Objekt nach dem Lesen ändern.

Ehrliche Grenzen: Datumstexte (2026-09-27) werden nicht zu LocalDate, feste Wertelisten nicht zu enums; sie bleiben String. Ungewöhnliche JSON-Namen (mit Leerzeichen oder Umlauten) werden für Java angepasst, @JsonProperty trägt den Originalnamen. Ohne Jackson entfernen Sie den Import und die Annotationen oder ersetzen sie durch das Gegenstück Ihrer Bibliothek (@SerializedName bei Gson).

Häufige Fragen

Wie erstelle ich eine Java-Klasse aus JSON?

Fügen Sie Beispiel-JSON links auf dieser Seite ein und geben Sie den Namen der Wurzelklasse ein. Rechts erscheint eine Java-Klasse mit verschachtelten Objekten als statische innere Klassen und fertigen Gettern und Settern. Kopieren Sie den Code und speichern Sie ihn in Ihrem Projekt unter dem Namen der Wurzelklasse (etwa Bestellung.java).

Warum sind manche Felder Integer statt int?

Das Feld fehlt in manchen Einträgen eines Arrays oder war im JSON null. Jackson setzt ein fehlendes oder null-Feld auf null, und ein primitives int kann kein null aufnehmen, deshalb steht dort Integer. Sind Sie sicher, dass jedes Feld immer vorhanden ist, stellen Sie Fehlende oder null-Felder auf Pflicht; dann wird int verwendet.

Warum wurde @JsonProperty hinzugefügt?

Folgt ein JSON-Schlüssel nicht der Java-Namenskonvention (kunden_name, vor-name), wird der Feldname in camelCase umgewandelt: kundenName. Damit Jackson dieses Feld beim Lesen dem richtigen Schlüssel zuordnet, steht der Originalname in @JsonProperty("kunden_name"). Schlüssel, die schon camelCase sind, bekommen keine Annotation.

Wird das eingefügte JSON an einen Server gesendet?

Nein. Die Typermittlung und das Schreiben des Java-Codes laufen vollständig in Ihrem Browser; selbst eine Beispielantwort mit Kundendaten oder API-Schlüsseln verlässt diese Seite nicht. Nach dem Laden funktioniert die Seite auch offline.