JSON zu Java
Kostenloses Online-Tool JSON zu Java, das JSON-Daten mit einem Klick in kommentierte Java-POJO-Entitätsklassen umwandelt. Unterstützt 4 Serialisierungs-Annotation-Bibliotheken (Lombok / Jackson / Gson / Fastjson), den Lombok @Data Modus zur automatischen Code-Reduktion, optional implementierbare Serializable-Schnittstelle und automatisch generierte toString / equals / hashCode-Methoden, 4 Feldnamen-Strategien sowie automatische Generierung verschachtelter Klassen.
Ähnliche Tools
Über JSON zu Java POJO und Java-Entitätsklassen
Das JSON zu Java-Tool (JSON to Java Converter) ist ein praktisches Werkzeug, das JSON-Datenstrukturen automatisch in Standard-Java-POJO-Klassen umwandelt. Es befreit Entwickler von der repetitiven Handarbeit, package / import / private Felder / getter / setter manuell zu schreiben, und eignet sich besonders, um Beispiel-JSONs aus API-Dokumentationen schnell in sofort kompilierbare Java-Entitätsklassen zu überführen.
POJO (Plain Old Java Object) ist die Kurzbezeichnung der Java-Community für ein „gewöhnliches Java-Objekt" mit folgenden Einschränkungen: ① private Felder; ② öffentliche getter / setter-Methoden für den Feldzugriff; ③ keine Abhängigkeit von Framework-Vererbung (z. B. keine Ableitung von HttpServlet / EJB). POJOs sind der zentrale Datenträger in Mainstream-Frameworks wie Spring Boot, Hibernate und Jackson – JSON zu Java bedeutet im Kern, die dynamische JSON-Struktur statisch in einen POJO-Typ zu überführen.
Dieses Tool unterstützt 4 große Serialisierungs-Annotation-Bibliotheken: ① Gson (Google, @SerializedName); ② Jackson (Spring-Boot-Standard, @JsonProperty + @JsonFormat); ③ Fastjson (Alibaba, @JSONField); ④ Lombok (Sammlung aus @Data / @Builder / @NoArgsConstructor / @AllArgsConstructor). Je nach im Projekt verwendetem Serialisierungs-Framework kann frei gewählt werden – kein Nachbearbeiten in der IDE nötig.
Der Lombok @Data Modus ist eine erweiterte Funktion dieses Tools: Bei Aktivierung enthält die generierte Java-Klasse nur 5 Zeilen (@Data + Felder), sämtliche getter / setter / equals / hashCode / toString werden zur Compile-Zeit von Lombok erzeugt. Im Vergleich zu IDE-Vorlagen oder handgeschriebenen POJOs verbessert sich die Lesbarkeit des Quellcodes um 80 %+ und der Wartungsaufwand sinkt um 60 %+. Hinweis: Das Projekt benötigt eine lombok-Abhängigkeit (Maven / Gradle-Koordinate).
Ein weiteres Differenzierungsmerkmal ist „ZIP-Download mit mehreren Dateien + automatische Paketpfad-Organisation": Herkömmliche Online-Tools erlauben nur Copy-Paste einzelner Klassen. Dieses Tool lädt auf Wunsch ein ZIP-Paket herunter, das die Verzeichnisstruktur nach Paketname (z. B. com/geekformat/pojo/) enthält. Nach dem Entpacken kann es direkt über „Import Project" in der IDE als Ganzes importiert werden, ohne dass Paketverzeichnisse manuell angelegt werden müssen.
Anwendungsfälle
- Android-Entwicklung: JSON-Antworten des Backends in Java-Entitätsklassen (POJO) umwandeln – mit optionalen Gson- / Moshi- / Fastjson- / Jackson-Annotationen direkt für die Deserialisierung verwendbar
- Spring-Boot-Backend: Beispiel-JSON aus API-Dokumentationen schnell in DTO- / VO- / Entity-Klassen umwandeln und mit Lombok @Data den Codeumfang drastisch reduzieren
- Anbindung an Drittanbieter-Schnittstellen: Antwort-JSONs der Gegenstelle in das passende Java-Modell umwandeln und mit der jeweiligen Serialisierungs-Annotation (Jackson / Fastjson / Gson) nahtlos anbinden
- Microservice-Architektur: Request- / Response-Datenmodelle von RPC-Schnittstellen vereinheitlichen – mehrere Teams teilen sich dieselbe Java-Klassendefinition
- Lehre und Schulung: in Datenstrukturkursen oder Java-Schulungen Beispiel-JSONs in POJOs umwandeln, um objektorientierte Modellierung zu demonstrieren
- API-Dokumentation: Java-Entitätsklassen-Beispiele in Swagger / OpenAPI / Knife4j-Dokumenten einbetten
- Vorbereitung von Unit-Tests: JSON-Fixtures in Java-Klassen umwandeln und anschließend mit Jackson deserialisieren, um datengetriebene Tests zu erstellen
- Datenmigrations-Skripte: JSON-Konfigurationsdateien in Java-Klassen umwandeln und stark typisiert in der Geschäftslogik verwenden
- Frontend-Mock-Abstimmung: Das Backend wandelt das JSON-Modell in Java um, das Frontend erhält parallel die passende TypeScript-Interface- bzw. Java-POJO-Definition
- Code-Review: API-Antwort-JSONs direkt in lesbare POJOs umwandeln, um Feldbenennungen im Code-Review zu diskutieren
- Refactoring von Altprojekten: Code, der bisher dynamisch per JSONObject auf JSON zugreift, auf stark typisierten POJO-Zugriff umstellen
- Entity / DTO Multi-Rollen-Modellierung: Aus demselben JSON UserEntity (DB-Schicht) + UserDTO (API-Schicht) + UserVO (View-Schicht) erzeugen – mit jeweils unterschiedlichen Annotationen
- Anbindung an snake_case-Backend-APIs: Das Backend liefert Felder in snake_case, das Java-Frontend aktiviert „In camelCase umwandeln" plus Gson/Jackson-Annotationen für eine nahtlose Anbindung
- Persistierbare DTOs: Mit aktivierter Option „Serializable implementieren" direkt in Redis-Caches oder verteilte Session-Speicher einsetzbar
Anleitung
- Füge im linken Editor ein JSON-Objekt (empfohlen) oder -Array ein oder klicke auf „Sample", um das chinesische Beispiel (mit verschachteltem address / company / tags) zu laden
- Klicke in der Werkzeugleiste auf „Settings" (bzw. die Schaltfläche mit dem Klassennamen) und wähle im Dialog: ① Root-Klassenname (z. B. User) und Paketname (z. B. com.example.entity); ② Serialisierungs-Annotation-Bibliothek (Gson / Jackson / Fastjson / Lombok / Keine); ③ Code-Stil (toString / equals / hashCode / Konstruktoren / Serializable); ④ Feldnamen-Strategie (Wie vorhanden beibehalten / camelCase / Alles in Kleinbuchstaben / UPPER_SNAKE)
- Das Tool konvertiert automatisch innerhalb von 400ms und zeigt rechts alle generierten Java-Klassen (jede Klasse auf einer eigenen Karte, in der Titelleiste werden die aktuelle Annotation-Bibliothek und das Lombok-Badge live angezeigt). Bei JSON-Fehlern erscheint die Schaltfläche „JSON reparieren"
- Prüfe, ob die generierten Klassen-, Feldnamen und Annotationen den Erwartungen entsprechen; passe sie bei Bedarf durch Änderung der Quell-JSON-Keys oder erneutes Öffnen der Settings an
- Wenn alles passt, kopiere einzelne Klassen über die Schaltfläche „Kopieren" in deine IDE oder lade alle Klassen über „Download ZIP" als Paket (mit Paketpfad-Verzeichnisstruktur) herunter
Funktionen
- 4 Serialisierungs-Annotation-Bibliotheken: Gson (@SerializedName) / Jackson (@JsonProperty + @JsonFormat für Datumsfelder) / Fastjson (@JSONField) / Lombok (@Data) – per Schalter umschaltbar
- Lombok @Data Modus: generiert automatisch @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor und reduziert die Java-Klasse von ~50 Zeilen auf ~5 Zeilen
- 4 Feldnamen-Strategien: Wie vorhanden beibehalten / snake_case zu camelCase (user_name → userName) / Alles in Kleinbuchstaben / UPPER_SNAKE Konstanten-Stil
- Frei kombinierbarer Code-Stil: optional generierbar sind toString / equals / hashCode / parameterloser Konstruktor / Vollargument-Konstruktor / implementierung der Serializable-Schnittstelle
- Intelligente Typableitung: erkennt automatisch String / Integer / Double / Boolean / List<Object> / verschachtelte Objekttypen – keine manuelle Typzuweisung nötig
- Automatische Generierung verschachtelter Klassen: verschachtelte Objekte werden in eigenständige Java-Klassen umgewandelt (Klassennamen mit großem Anfangsbuchstaben), Objekte in Arrays werden nach der Regel „Entfernen des Plural-s" benannt
- Automatisches Auflösen von Array-Generics: JSON-Arrays werden automatisch in Java List<T> konvertiert, der Elementtyp wird anhand des ersten Elements abgeleitet
- Vollständige POJO-Vorlage: generiert komplette .java-Dateien mit package-Deklaration + Datei-Header-Kommentar (Copyright + automatischer Zeitstempel) + import + private Felder + getter/setter
- ZIP-Download mit mehreren Dateien: alle generierten Klassen werden nach Paketpfad organisiert (z. B. com/example/entity/User.java) und mit einem Klick als ZIP-Archiv heruntergeladen – inklusive Verzeichnisstruktur
- Eigener Paket- und Klassenname: frei wählbarer package (z. B. com.example.entity) und Root-Klassenname (z. B. User) – alle Klassennamen werden basierend auf dem Root-Klassennamen synchron erzeugt
- Einrückungssteuerung: rechtsseitig umschaltbar zwischen 2 und 4 Leerzeichen Einrückung, passend zu den Team-Code-Konventionen
- Einzelne Klassen kopieren: jede generierte Java-Klasse verfügt über eine eigene Schaltfläche „Kopieren" zum bequemen Einfügen in die IDE
- Automatische Konvertierung und Fehlerbehebung: Eingabe wird nach 400ms Debounce automatisch konvertiert; bei JSON-Fehlern erscheint die Schaltfläche „JSON reparieren", die häufige Formatfehler (überflüssige Kommata, einfache Anführungszeichen usw.) automatisch behebt
- Beispieldaten und Datei-Upload: integrierte chinesische Beispieldaten (mit verschachteltem address / company / tags / scores), Drag-and-Drop oder Klick zum Hochladen von .json- und .txt-Dateien
- Lokaler Verlauf: bis zu 200 letzte Eingaben werden persistent in localStorage gespeichert und können nach einem Neuladen oder versehentlichen Schließen der Seite wiederhergestellt werden
- Lokale Ausführung im Browser: gesamtes JSON-Parsing, Java-Generierung und ZIP-Packung erfolgen über JavaScript direkt in deinem Browser – es werden keine Daten an einen Server übertragen
Codebeispiele
Java: POJO mit Jackson deserialisieren
javaHäufigste Verwendung in Spring-Boot-Projekten: Mit dem vom Tool generierten POJO eine API-Antwort via Jackson deserialisieren.
import com.fasterxml.jackson.databind.ObjectMapper;
import com.geekformat.pojo.User;
import com.geekformat.pojo.Address;
public class ApiClient {
private final ObjectMapper objectMapper = new ObjectMapper();
public User getUser(int userId) throws Exception {
// 1) API aufrufen und JSON-String abrufen
String json = httpClient.get("https://api.example.com/users/" + userId);
// 2) Direkt in das vom Tool generierte POJO deserialisieren
User user = objectMapper.readValue(json, User.class);
// 3) Starker Typzugriff auf Felder (Typprüfung zur Compile-Zeit)
System.out.println("User: " + user.getName());
if (user.getAddress() != null) {
System.out.println("City: " + user.getAddress().getCity());
}
return user;
}
public static void main(String[] args) throws Exception {
ApiClient client = new ApiClient();
User user = client.getUser(123);
System.out.println(user.getName());
}
}Java: Lombok @Data + @Builder verwenden
javaVerwendung des im Lombok-Modus generierten Codes: Verkettete Builder-Aufrufe zum Erzeugen von Objekten; das vollständige POJO wird zur Compile-Zeit von Lombok erzeugt.
import com.geekformat.pojo.User;
public class UserService {
public User createUser() {
// Lombok @Builder-Modus: verkettete Aufrufe, intuitiver als klassische Setter
User user = User.builder()
.id(1)
.userName("Alice")
.email("alice@example.com")
.isActive(true)
.createdAt("2026-07-08T10:00:00.000Z")
.build();
System.out.println(user);
// Lombok @Data erzeugt automatisch toString():
// User(id=1, userName=Alice, email=alice@example.com, ...)
return user;
}
public boolean isValid(User user) {
// Lombok @Data erzeugt automatisch equals() und hashCode()
return user != null && user.getId() != null;
}
}
/*
* Zugehörige Abhängigkeit in pom.xml:
* <dependency>
* <groupId>org.projectlombok</groupId>
* <artifactId>lombok</artifactId>
* <version>1.18.30</version>
* <scope>provided</scope>
* </dependency>
*/Kommandozeile: ZIP entpacken und in IDE importieren
bashDas Tool lädt ein ZIP-Paket herunter (nach Paketpfad organisiert); nach dem Entpacken kann es direkt in der IDE importiert werden.
# 1) Nach dem Download des ZIP (Dateiname z. B. User.zip)
unzip User.zip -d src/main/java/
# 2) Verzeichnisstruktur prüfen
tree src/main/java/
# src/main/java/
# └── com/
# └── example/
# └── entity/
# ├── User.java
# ├── Address.java
# └── Company.java
# 3) In IntelliJ IDEA: Rechtsklick auf das Verzeichnis com → "Mark Directory as" → "Sources Root"
# In Eclipse: File → Import → Existing Projects into Workspace
# 4) Direkt im Spring-Boot-Projekt verwenden
# UserController.java
# @PostMapping("/users")
# public ResponseEntity<User> createUser(@RequestBody User user) {
# userService.save(user);
# return ResponseEntity.ok(user);
# }
# 5) Kompilieren und prüfen
mvn compile
# [INFO] BUILD SUCCESS
# 6) (Optional) Bei Verwendung von Lombok lombok-Abhängigkeit in pom.xml ergänzen
# <dependency>
# <groupId>org.projectlombok</groupId>
# <artifactId>lombok</artifactId>
# </dependency>Häufig gestellte Fragen
Wie wandle ich JSON in eine Java-POJO-Klasse um?
Füge den JSON-Inhalt in das Eingabefeld ein – das Tool konvertiert automatisch innerhalb von 400ms. Alternativ klicke in der Werkzeugleiste auf „Convert". Nach der Konvertierung werden rechts alle generierten Java-Klassen angezeigt, jede mit eigener Schaltfläche „Kopieren". Mit „Download ZIP" in der Werkzeugleiste lädst du alle Klassen auf einmal als Paket herunter.
Welche JSON-Datenstrukturen werden unterstützt?
Zwei Strukturen werden unterstützt: ① JSON-Objekt (als Root-Klasse, automatisch generiert als public class RootBean { ... }); ② JSON-Array (das erste Objekt des Arrays dient als Root-Klassenvorlage). Alle verschachtelten Objekte werden rekursiv in eigenständige Klassen verarbeitet, Objekte in Arrays rekursiv als List-Elementtypen.
Was enthält eine generierte Java-Klasse?
Jede generierte .java-Datei enthält: ① Datei-Header-Kommentar (Copyright + automatischer Zeitstempel); ② package-Deklaration; ③ import-Anweisungen (inkl. List / Objects / Serializable / Gson / Jackson / Fastjson / Lombok – je nach Bedarf automatisch importiert); ④ public class-Deklaration (optional implements Serializable); ⑤ private Felder (optional mit Annotationen); ⑥ Standard-getter / setter-Methoden (oder nur Lombok-Annotationen); ⑦ optionale toString / equals / hashCode-Methoden. Sie ist sofort mit javac kompilierbar.
Werden Gson / Jackson / Fastjson / Lombok-Annotationen unterstützt?
Ja. Wähle in der Gruppe „Serialisierungs-Annotation-Bibliothek" im Settings-Dialog: ① Gson (jedes Feld erhält @SerializedName("Original-Key")); ② Jackson (jedes Feld erhält @JsonProperty, Datumsfelder zusätzlich @JsonFormat); ③ Fastjson (jedes Feld erhält @JSONField(name="Original-Key")); ④ Lombok (Klasse erhält @Data, optional @Builder / @NoArgsConstructor / @AllArgsConstructor); ⑤ Keine Annotationen (Standard, reines POJO). Die gewählte Bibliothek wird automatisch importiert.
Wie sieht der mit Lombok @Data generierte Code aus?
Bei aktiviertem Lombok wird die generierte Java-Klasse stark komprimiert. Beispiel: class User mit Lombok enthält nur 5 Zeilen: @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + Felddeklarationen. Alle getter / setter / equals / hashCode / toString werden zur Compile-Zeit von Lombok erzeugt, die Lesbarkeit des Quellcodes wird deutlich verbessert. Hinweis: Das Projekt benötigt eine Lombok-Abhängigkeit (lombok-Koordinate in pom.xml / build.gradle), die IDE benötigt das Lombok-Plugin.
Wie konvertiere ich snake_case-Feldnamen in camelCase?
Wähle in der Gruppe „Feldnamen-Strategie" im Settings-Dialog den Modus „In camelCase umwandeln". Das Tool wandelt JSON-Feldnamen automatisch von snake_case in den für Java empfohlenen Stil um. Beispiel: user_name → userName, created_at → createdAt, is_active → isActive. Falls du Gson/Jackson/Fastjson-Annotationen gewählt hast, bleibt in der Annotation der ursprüngliche snake_case-String erhalten, damit die Deserialisierung korrekt zugeordnet wird.
Wie werden verschachtelte JSON-Objekte behandelt?
Das Tool erstellt für verschachtelte Objekte automatisch eigenständige Java-Klassen. Benennungsregel: Der Schlüssel des verschachtelten Objekts wird mit großem Anfangsbuchstaben als Klassenname verwendet (z. B. address → Address), Objekte in Arrays erhalten den Klassennamen, indem das letzte „s" entfernt und der Anfangsbuchstabe großgeschrieben wird (z. B. users → User). Alle verschachtelten Klassen enthalten ebenfalls vollständige Felder + getter/setter + Annotationen.
Werden Array-Felder automatisch in List umgewandelt?
Ja. JSON-Array-Felder werden automatisch in Java List<T> konvertiert, der Elementtyp wird anhand des ersten Elements abgeleitet. Beispiel: ["a","b","c"] → List<String>; [{...},{...}] → List<User> (User ist eine anhand des Schlüssels benannte neue Klasse); leere Arrays [] erhalten standardmäßig List<Object>.
Wie ändere ich Root-Klassennamen und Paketnamen?
Oben rechts in der Werkzeugleiste befindet sich eine Settings-Schaltfläche (oder eine Schaltfläche mit Klassennamen-Beschriftung). Ein Klick öffnet den Einstellungsdialog, in dem du Folgendes festlegen kannst: ① Root-Klassenname (Standard: JsonRootBean); ② Paketname (Standard: com.geekformat.pojo). Nach der Änderung werden alle generierten Klassennamen aktualisiert und die Verzeichnisstruktur im ZIP richtet sich nach dem Paketpfad.
Wird eine einzelne .java-Datei oder ein ZIP-Paket heruntergeladen?
Es wird ein ZIP-Paket heruntergeladen (JsonRootBean.zip), das alle generierten Java-Klassen enthält, organisiert nach Paketpfad. Beispiel für den Paketnamen com.geekformat.pojo: ZIP-Inhalt com/geekformat/pojo/JsonRootBean.java, com/geekformat/pojo/Address.java usw. Du kannst es mit dem unzip-Befehl oder direkt in der IDE importieren.
Kann ich eine einzelne Klasse direkt in die IDE kopieren?
Ja. Jede generierte Java-Klasse wird als separate Karte angezeigt, mit einer Schaltfläche „Kopieren" oben rechts. Nach dem Klick wird der vollständige Code der Klasse (inklusive package + import + Klassendefinition + Felder + Annotationen + getter/setter) in die Zwischenablage kopiert und kann direkt in IntelliJ IDEA / Eclipse / VS Code eingefügt werden.
Wie generiere ich den Lombok Builder-Modus mit @Builder?
In der Gruppe „Code-Stil" im Settings-Dialog: ① Aktiviere „Lombok @Data zur Code-Reduktion verwenden" (dadurch wird die Lombok-Annotation-Bibliothek automatisch aktiviert); ② Aktiviere „Builder-Muster @Builder generieren". Die generierte Klasse erhält automatisch die Annotation @Builder. Verwendung: User user = User.builder().id(1).name("Alice").build();
Wie bringe ich die generierte Klasse dazu, die Serializable-Schnittstelle zu implementieren?
Aktiviere in der Gruppe „Code-Stil" im Settings-Dialog die Option „Serializable-Schnittstelle implementieren". Das Tool fügt dann automatisch implements Serializable zur Klassendeklaration hinzu und importiert java.io.Serializable. Ideal für Szenarien, in denen das POJO in Dateien geschrieben, über das Netzwerk übertragen oder in Redis zwischengespeichert werden soll.
Was ist der Unterschied zwischen JSON zu Java und JSON zu TypeScript?
Beide wandeln JSON in Typdefinitionen der jeweiligen Sprache um, mit unterschiedlichem Schwerpunkt: ① Java erzeugt vollständige POJO-Klassen (inklusive package + import + private Felder + getter/setter), sofort kompilier- und lauffähig; ② TypeScript erzeugt interface- oder type-Deklarationen, die nur die Datenstruktur beschreiben, ohne Implementierung. Die Wahl hängt von deiner Entwicklungssprache ab.
Kann der generierte Code in Spring-Boot-Projekten verwendet werden?
Ja. Die von diesem Tool generierten POJO-Klassen entsprechen der Java-Bean-Spezifikation (private Felder + getter/setter) und sind kompatibel mit der Jackson-Deserialisierung in Spring Boot, MVC-Form-Binding und JPA-Entitätsdefinitionen (manuell). Für eine vereinfachte Variante mit Lombok (@Data / @Builder) kannst du dies im Settings-Dialog mit einem Klick aktivieren – kein zusätzliches Refactoring in der IDE nötig.
Was kann ich tun, wenn das JSON-Format fehlerhaft ist?
Das Tool prüft die JSON-Validität automatisch. Bei Fehlern erscheint rechts eine rote Fehlermeldung mit der Schaltfläche „JSON reparieren". Ein Klick darauf behebt häufige Fehler automatisch: ① überflüssige Kommata am Ende; ② Ersetzen einfacher Anführungszeichen durch doppelte; ③ Ergänzen fehlender Anführungszeichen bei Keys; ④ Entfernen von Kommentaren. Nach erfolgreicher Reparatur kannst du direkt Java-Klassen generieren.
Werden Daten an einen Server übertragen? Ist der Datenschutz gewährleistet?
Die Verarbeitung erfolgt vollständig lokal im Browser. Sämtliches JSON-Parsing, Java-Klassengenerierung und ZIP-Packung werden in deinem Browser per JavaScript (JSZip) ausgeführt. Weder die eingegebenen JSON-Daten noch der generierte Java-Code werden an irgendeinen Server übertragen, aufgezeichnet oder in der Cloud zwischengespeichert. Auch sensible JSONs mit internen Schnittstellenfeldern, unveröffentlichten Geschäftsstrukturen oder nicht-öffentlichen API-Antworten können bedenkenlos verwendet werden – beim Schließen der Seite werden alle Daten gelöscht.
Wird das Tool bei einem JSON mit 10.000 Zeilen langsam?
Es gibt keine explizite Zeilenbegrenzung, jedoch werden das Parsen und Rendern sehr großer JSONs im Browser spürbar langsamer. Empfehlungen: ① Zerlege das JSON und konvertiere es in mehreren Schritten; ② Konzentriere dich jeweils nur auf eine Verschachtelungsebene; ③ Wenn du 100+ Klassen in einem Rutsch generieren musst, verwende lieber ein Code-Generator-Plugin direkt in der IDE (z. B. MyBatis Generator, MapStruct) oder dedizierte Java-Code-Generator-Bibliotheken (JavaPoet / JOOQ).
Fehlerbehebung
Meldung „Bitte JSON-Daten eingeben" oder ähnlicher Fehler
Das linke Eingabefeld ist leer oder enthält nur Leerzeichen. Stelle sicher, dass gültiger JSON-Inhalt eingefügt ist, klicke alternativ auf „Sample", um das chinesische Beispiel zu laden, oder auf „Upload", um eine .json- / .txt-Datei auszuwählen.
Meldung „Unexpected token ... in JSON at position N"
Ungültiges JSON-Format. Häufige Ursachen: ① Überflüssiges Komma am Ende (z. B. {"a":1,}); ② Einfache Anführungszeichen statt doppelter; ③ JS-Objekt-Syntax (z. B. {key: value}) statt JSON (z. B. {"key": "value"}). Die Schaltfläche „JSON reparieren" behebt einige Fehler automatisch.
Generierte Annotationen passen nicht zum Projekt-Framework
Wechsle die Annotation-Bibliothek in der Gruppe „Serialisierungs-Annotation-Bibliothek" des Settings-Dialogs: ① Spring-Boot-Projekte: Jackson; ② Android-Projekte: Gson; ③ Alibaba-Java-Backend: Fastjson; ④ Code-Reduktion gewünscht: Lombok; ⑤ Keine Annotationen gewünscht: „Keine Annotationen". Nach dem Wechsel werden alle Feld-Annotationen und Imports neu erzeugt.
Lombok-Compile-Fehler „Symbol nicht gefunden"
Das Projekt enthält keine Lombok-Abhängigkeit. Ergänze in pom.xml: `<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency>`; außerdem das Lombok-Plugin in der IDE installieren (IntelliJ IDEA → Plugins → nach Lombok suchen → Install).
Kein Lombok, aber trotzdem kompakter Code gewünscht
Lombok @Data im Settings-Dialog deaktivieren und stattdessen den klassischen Modus kompakt halten: ① „Parameterlosen Konstruktor generieren" + „Vollargument-Konstruktor generieren" + „toString / equals / hashCode generieren" aktivieren; ② Im Team lassen sich Postfix-Templates der IDE (IntelliJ .var / .field) zur Massengenerierung nutzen. Alternativ die integrierte POJO-Generierung der IDE verwenden (Alt+Insert → Constructor / Getter / Setter).
Nach snake_case → camelCase meldet die IDE „Symbol nicht gefunden"
„In camelCase umwandeln" ändert nur den Feldnamen, aber die von Lombok @Data erzeugten getter/setter richten sich nach dem neuen Feldnamen (z. B. user_name → userName → getUserName / setUserName), der Code ist also korrekt. Bleibt der Fehler, prüfe: ① IDE wurde erfolgreich neu kompiliert; ② Lombok-Plugin ist installiert und aktiviert; ③ IDE-Cache leeren (File → Invalidate Caches).
Klassenname des verschachtelten Objekts entspricht nicht dem Wunsch (z. B. categories wird zu Categori)
Das Tool wendet für Objekte in Arrays die Regel „letztes s entfernen + Großschreibung" an, was bei unregelmäßigen Pluralen wie categories ungünstig ist. Empfehlung: ① Den Quell-JSON-Key auf Singular ändern (z. B. categories → category); ② nach der Generierung in der IDE die Klasse per Rename umbenennen (und alle Referenzen mit anpassen).
Verzeichnisstruktur des entpackten ZIP ist falsch
Die Verzeichnisse im ZIP folgen dem eingestellten package (Standard com/geekformat/pojo/). Stimmt der Pfad nach dem Entpacken nicht: ① Paketnamen ändern (z. B. com.example) und neu herunterladen; ② unzip -d src/main/java verwenden, um das Zielverzeichnis anzugeben; ③ oder in der IDE direkt File → Open für den entpackten Ordner wählen.
Deserialisierung von Datumsfeldern im Jackson-Modus schlägt fehl
Das Tool erkennt ISO-8601-Datums-Strings wie "2026-07-08T10:00:00.000Z" automatisch und ergänzt @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"). Weicht dein Datumsformat ab (z. B. "2026-07-08"): ① Verwende im Quell-JSON das ISO-8601-Format; ② oder passe das @JsonFormat-pattern nach der Generierung manuell an.
ZIP mit chinesischen Dateinamen wird unter Windows falsch dargestellt
ZIP-Dateinamen und Java-Klassennamen sind standardmäßig englisch (ASCII) und zeigen kein fehlerhaftes Encoding. Enthält das Quell-JSON chinesische Keys (Feldnamen werden chinesisch), meldet die IDE möglicherweise eine Namenskonventions-Warnung, zeigt aber keinen Zeichensalat. Es empfiehlt sich, JSON-Keys auf englische Bezeichner (Camel-Case) umzustellen, was den Java-Konventionen entspricht.
Bei 100+ verschachtelten Klassen ruckelt die Seite
Es gibt keine explizite Klassenobergrenze, jedoch leistet das DOM-Rendering im Browser bei sehr großen Strukturen deutlich. Empfehlungen: ① JSON in mehrere Module aufteilen und einzeln konvertieren; ② direkter Code-Generator in der IDE verwenden (z. B. IntelliJ-Plugin „JSON to POJO"); ③ Verschachtelungstiefe nicht über 6 Ebenen – andernfalls die JSON-Struktur refaktorieren.
Numerisches Array wird zu List<Object> generiert
Tritt meist bei leeren Arrays [] auf, die standardmäßig zu List<Object> abgeleitet werden. Füge im Quell-JSON mindestens ein Beispiel-Element hinzu (z. B. [1,2,3]), dann leitet das Tool den Typ vom ersten Element ab. Alternativ List<Object> nach der Generierung manuell in List<Integer> ändern.
Null-Wert-Felder werden als Object generiert
JSON-null-Werte werden vom Tool standardmäßig als Object abgeleitet, da der tatsächliche Typ nicht erkennbar ist. Das ist eine sichere Variante, um Fehleinschätzungen zu vermeiden. Kennst du den Typ, kannst du im Quell-JSON einen Beispielwert setzen (z. B. "field": "" → String), nach der Generierung den Beispielwert wieder entfernen.
Nach Änderung des package-Namens aktualisiert sich die ZIP-Verzeichnisstruktur nicht
Nach Änderung des package muss „Convert" erneut angeklickt werden (oder die Änderung wird nach 400ms automatisch ausgelöst). Nach dem Schließen des Settings-Dialogs verwendet das Tool beim nächsten Eingabeereignis den neuen package-Namen für die Regeneration aller Dateien.
Wie entferne ich den automatisch generierten Datei-Header (z. B. Copyright)?
Das Tool erzeugt standardmäßig einen Datei-Header mit Copyright und Zeitstempel. Ist dieser nicht erwünscht, lässt er sich in der IDE per „Global Find & Replace" entfernen oder durch Anpassen der Funktion generateFileHeader im Tool-Quellcode (erfordert Neu-Deployment).
Wie führe ich eine Konvertierung „snake_case-Backend + Java-Frontend" durch?
Klassisches Szenario: Das Backend (z. B. Python- / Go-Service) liefert Felder in snake_case, das Java-Frontend benötigt Felder in camelCase. Vorgehen: ① Im Settings-Dialog die Jackson- oder Gson-Annotation-Bibliothek wählen; ② Feldnamen-Strategie „In camelCase umwandeln" auswählen; ③ Das Tool erzeugt: Feldname = userName (camelCase), Annotationswert = "user_name" (Original-Key bleibt erhalten). Bei der Deserialisierung erfolgt die Zuordnung anhand der Annotation, der Zugriff folgt den Java-Namenskonventionen.
Glossar
- POJO
- Plain Old Java Object – ein gewöhnliches Java-Objekt. Eigenschaften: private Felder + öffentliche getter/setter + keine Framework-Abhängigkeit. Dieses Tool erzeugt Standard-POJOs.
- JavaBean
- Frühere Java-Community-Bezeichnung für POJO. Voraussetzungen: öffentlicher parameterloser Konstruktor + private Felder + öffentliche getter/setter. Die von diesem Tool erzeugten Klassen entsprechen der JavaBean-Spezifikation.
- DTO (Data Transfer Object)
- Datentransferobjekt, häufig verwendet für die Datenübertragung zwischen Prozessen (API / RPC). Die von diesem Tool erzeugten POJOs können direkt als DTO verwendet werden.
- VO (Value Object)
- Wertobjekt, in der Regel auf der View-Schicht verwendet (Daten, die der Controller an das Frontend zurückgibt). Die von diesem Tool erzeugten POJOs sind ebenfalls dafür geeignet.
- Entity
- Entitätsobjekt, entspricht einer Zeile in einer Datenbanktabelle. Die erzeugten POJOs können als Basisklasse für JPA- / Hibernate-@Entity-Definitionen dienen (nach manueller Hinzufügung der Annotationen).
- @SerializedName
- Annotation der Gson-Bibliothek zur Feldzuordnung. Im Gson-Modus fügt das Tool jedem Feld automatisch @SerializedName("Original-Key") hinzu, damit die Deserialisierung anhand des ursprünglichen JSON-Feldnamens erfolgt.
- @JsonProperty
- Annotation der Jackson-Bibliothek zur Feldzuordnung. Im Jackson-Modus fügt das Tool jedem Feld @JsonProperty("Original-Key") hinzu; Datumsfelder erhalten zusätzlich @JsonFormat zur Definition des Serialisierungsformats.
- @JSONField
- Annotation der Alibaba-Fastjson-Bibliothek zur Feldzuordnung. Im Fastjson-Modus fügt das Tool jedem Feld automatisch @JSONField(name = "Original-Key") hinzu.
- Lombok @Data
- Zusammengesetzte Annotation der Lombok-Bibliothek, äquivalent zu @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor. Im Lombok-Modus fügt das Tool diese Annotation mit einem Klick auf Klassenebene hinzu.
- Lombok @Builder
- Annotation für das Builder-Muster in Lombok. Nach Aktivierung fügt das Tool sie automatisch hinzu und erzeugt eine verkettet aufrufbare builder()-Methode.
- Serializable
- Java-Marker-Interface. Nach Implementierung kann das Objekt serialisiert werden (z. B. in Dateien schreiben, Netzwerkübertragung, Redis-Cache). Mit aktivierter Option „Serializable implementieren" fügt das Tool implements Serializable hinzu und importiert java.io.Serializable.
- Verschachtelte Klasse (Nested Class)
- Eigenständige Java-Klasse, die das Tool für verschachtelte JSON-Objekte automatisch erzeugt. Benennungsregel: Schlüssel des verschachtelten Objekts mit großem Anfangsbuchstaben (z. B. address → Address).
- List-Generics
- Interface des Java-Collections-Frameworks. Das Tool wandelt JSON-Arrays automatisch in List<T> um, wobei T anhand des ersten Elements abgeleitet wird (z. B. ["a"] → List<String>).
- getter / setter
- Standard-Accessor-Methoden eines Java-Beans. getter heißt getXxx() und gibt das Feld zurück, setter heißt setXxx(value) und setzt es. Im Lombok-Modus werden sie automatisch von @Data erzeugt, im klassischen Modus explizit vom Tool generiert.
- package-Deklaration
- Erste Nicht-Kommentar-Zeile einer Java-Datei, die den Namespace der Klasse deklariert. Das Tool erzeugt sie anhand des vom Benutzer festgelegten Paketnamens automatisch und organisiert die Verzeichnisstruktur im ZIP nach com/xxx/yy.
- snake_case → camelCase
- Umwandlung der Feldnamenstrategie. Das Tool unterstützt die automatische Umwandlung: user_name → userName, is_active → isActive, created_at → createdAt – konform mit den Java-Namenskonventionen.
- JSZip
- JavaScript-Bibliothek zur ZIP-Erstellung im Browser. Das Tool verwendet sie, um ZIP-Dateien direkt im Browser zu erzeugen, ohne serverseitige Verarbeitung.
- localStorage-Verlauf
- Lokaler Schlüssel-Wert-Speicher des Browsers (Kapazität ca. 5–10 MB). Das Tool nutzt localStorage, um bis zu 200 letzte Eingaben dauerhaft zu speichern.
- Debounce
- Frontend-Leistungsoptimierung: Häufig auftretende Ereignisse werden auf den letzten Aufruf reduziert. Das Tool verwendet ein Debounce von 400ms, um Ruckler beim Parsen großer Dateien zu vermeiden.
- tryFixJSON
- Im Tool integrierte JSON-Reparaturfunktion: behebt automatisch häufige Fehler wie überflüssige Kommata am Ende, Ersetzen einfacher Anführungszeichen durch doppelte, Ergänzen fehlender Anführungszeichen bei Keys und Entfernen von Kommentaren.
Schnellübersicht: JSON-Typ zu Java-Typ
Vom Tool automatisch abgeleitete JSON-Datentypen und die zugehörigen Java-Typen:
| JSON-Wertbeispiel | Erkennung | Generierter Java-Typ | Standardfeldwert |
|---|---|---|---|
null | value === null | Object | null |
true / false | typeof value === 'boolean' | Boolean | false |
42 | typeof value === 'number' && Number.isInteger(value) | Integer | 0 |
3.14 | typeof value === 'number' && !Number.isInteger(value) | Double | 0.0 |
"hello" | typeof value === 'string' | String | null |
[...] (leeres Array) | Array.isArray(value) && value.length === 0 | List<Object> | new ArrayList<>() |
["a","b"] | Array.isArray(value) && typeof value[0] === 'string' | List<String> | new ArrayList<>() |
[1,2,3] | Array.isArray(value) && typeof value[0] === 'number' | List<Integer> | new ArrayList<>() |
[{...},{...}] | Array.isArray(value) && typeof value[0] === 'object' | List<Xxx> | new ArrayList<>() |
{...} (verschachteltes Objekt) | typeof value === 'object' && !Array.isArray(value) | Xxx (eigenständige Klasse) | new Xxx() |
Vergleich der 4 Serialisierungs-Annotation-Bibliotheken
Die 4 unterstützten Java-JSON-Serialisierungs-Annotation-Bibliotheken – wähle je nach verwendetem Framework:
| Bibliothek | Generierte Annotation | Automatischer Import | Szenario |
|---|---|---|---|
Keine Annotationen | Keine (reines POJO) | Keine | Szenarien ohne Framework-Abhängigkeit; manuelle Deserialisierung mit generischen Bibliotheken wie jackson-databind |
Gson | @SerializedName("user_name") | import com.google.gson.annotations.SerializedName; | Android-Apps, Google-Gson-Ökosystem, Retrofit + Gson |
Jackson | @JsonProperty("user_name") + @JsonFormat für Datumsfelder | import com.fasterxml.jackson.annotation.JsonProperty; + JsonFormat | Standard-Serialisierungs-Framework in Spring Boot, Web-Backend-APIs |
Fastjson | @JSONField(name = "user_name") | import com.alibaba.fastjson.annotation.JSONField; | Alibaba-Ökosystem, interne Java-Systeme, Hochleistungs-Deserialisierung |
Lombok | @Data auf Klassenebene (+ optional @Builder / @NoArgsConstructor / @AllArgsConstructor) | import lombok.Data; (+ weitere) | Alle Projekte, die Boilerplate-Code reduzieren möchten; kombinierbar mit jeder Serialisierungs-Bibliothek |
Vergleich der 4 Feldnamen-Strategien
Die 4 unterstützten Feldnamen-Umwandlungsstrategien – optimiert für unterschiedliche JSON-Quellen:
| Strategie | Eingabebeispiel | Ausgabe Java-Feldname | Szenario |
|---|---|---|---|
Wie vorhanden beibehalten | user_name | user_name | JSON-Feldnamen entsprechen bereits den Java-Konventionen (z. B. interne APIs) oder das Team bevorzugt snake_case |
In camelCase umwandeln | user_name | userName | Empfohlener Java-Namensstil; snake_case-Backend-APIs (z. B. Python- / Go-Backend) |
Alles in Kleinbuchstaben | UserName | username | Anbindung an spezielle Datenbankfelder (selten) |
UPPER_SNAKE | user_name | USER_NAME | Java-Konstantendefinitionen (public static final); für normale POJO-Felder nicht empfohlen |
Lombok @Data Modus vs. klassischer POJO-Modus
Vergleich der beiden Code-Stile hinsichtlich Zeilenanzahl, Lesbarkeit und Abhängigkeiten:
| Vergleichspunkt | Lombok @Data Modus | Klassischer POJO-Modus |
|---|---|---|
Quellcodezeilen | ~5 Zeilen (4 Annotationen + Felder) | ~50 Zeilen (4–5 Zeilen getter/setter pro Feld + Klasse) |
Lesbarkeit | Sehr hoch (alle Felder und Annotationen auf einen Blick) | Mittel (viel Boilerplate-Code) |
Compile-Output | Vollständiger Bytecode (vom IDE- / javac-Lombok-Prozessor erzeugt) | Vollständiger Bytecode (direkt kompiliert) |
Laufzeit-Abhängigkeit | Lombok-Abhängigkeit erforderlich (zur Compile-Zeit) | Keine zusätzliche Abhängigkeit |
IDE-Unterstützung | Lombok-Plugin erforderlich (IntelliJ / Eclipse) | Nativ unterstützt |
Wartungsaufwand | Gering (Feld hinzufügen genügt) | Hoch (getter/setter pro Feld manuell ergänzen) |
Geeignete Teams | Mittelgroße und große Projekte, die Lombok bereits eingeführt haben | Projekte, die Lombok-Annotationen ablehnen; Wartung von Altprojekten |
Privacy & Security
Bei diesem JSON-zu-Java-Tool erfolgen sämtliche JSON-Analysen, Java-Klassengenerierungen und ZIP-Packungen vollständig lokal in deinem Browser über JavaScript (JSZip). Weder die eingegebenen JSON-Daten noch der generierte Java-Code werden an irgendeinen Server übertragen, aufgezeichnet, zwischengespeichert oder in der Cloud gespeichert. Auch sensible JSONs mit internen Schnittstellenfeldern, unveröffentlichten Geschäftsstrukturen oder nicht-öffentlichen API-Antworten können bedenkenlos verwendet werden – beim Schließen der Seite werden alle Daten vollständig gelöscht.
Authoritative References
- MDNMDN - JSON.parse / JSON.stringify
- OracleOracle Java-Tutorial - Klassen und Objekte
- OracleOracle Java-Tutorial - Zugriffskontrolle
- LombokLombok Offizielle Dokumentation - @Data
- LombokLombok Offizielle Dokumentation - @Builder
- JacksonJackson Offizielle Dokumentation - ObjectMapper
- GoogleGson Benutzerhandbuch
- AlibabaFastjson GitHub
- SpringSpring Offizielle Dokumentation - @RequestBody
- JSON-Komprimierung
- CSV zu JSON
- JSON zu CSV
- JSON Diff
- JSON Escape / Unescape
- JSON Flatten
- JSON-Formatierung
- JSON-Generator
- JSONPath Online-Abfrage
- JSON zusammenführen
- JSON reparieren
- JSON Schema Validator
- JSON sortieren
- JSON Stringify
- JSON zu HTML-Tabelle
- JSON zu Java
- JSON zu Markdown
- JSON in SQL umwandeln
- JSON zu TOML
- JSON zu TypeScript
- XML zu JSON
- JSON zu XML
- YAML zu JSON
- JSON zu YAML
- JSON zu Python
- JSON zu Go
- JSON zu Rust
- JSON zu Swift
- JSON zu C#
- JSON zu C++
- JSON zu PHP