JSON in Java
Strumento JSON in Java online gratuito, converte i dati JSON in classi entità Java POJO con annotazioni in un solo clic. Supporta 4 librerie di annotazioni di serializzazione (Lombok / Jackson / Gson / Fastjson), modalità Lombok @Data per la riduzione automatica del codice, interfaccia Serializable opzionale e generazione automatica di toString / equals / hashCode, 4 strategie di denominazione dei campi e generazione automatica di classi annidate.
Raccomandazioni correlate
Informazioni su JSON in Java POJO e classi entità Java
Lo strumento JSON in Java (JSON to Java Converter) è un'utilità che converte automaticamente le strutture di dati JSON in codice di classi POJO Java standard. Solleva gli sviluppatori dal lavoro ripetitivo di scrivere manualmente package / import / campi private / getter / setter, ed è particolarmente indicato per trasformare rapidamente il JSON di esempio presente nella documentazione delle API in classi entità Java direttamente compilabili.
POJO (Plain Old Java Object) è l'acronimo usato dalla comunità Java per indicare un "normale oggetto Java", con i seguenti vincoli: ① campi private; ② metodi getter / setter pubblici per accedere ai campi; ③ nessuna dipendenza da framework (ad esempio nessuna estensione di HttpServlet / EJB). I POJO sono il principale veicolo di dati per framework diffusi come Spring Boot / Hibernate / Jackson; l'essenza della conversione JSON in Java è rendere statica la struttura dinamica del JSON come tipo POJO.
Questo strumento supporta 4 librerie principali di annotazioni di serializzazione: ① Gson (Google, annotazione @SerializedName); ② Jackson (predefinito in Spring Boot, annotazioni @JsonProperty + @JsonFormat); ③ Fastjson (Alibaba, annotazione @JSONField); ④ Lombok (insieme di @Data / @Builder / @NoArgsConstructor / @AllArgsConstructor). Gli sviluppatori possono scegliere liberamente in base al framework di serializzazione utilizzato nel progetto, senza necessità di ulteriori interventi nell'IDE.
La modalità Lombok @Data è una funzionalità avanzata di questo strumento: una volta attivata, la classe Java generata contiene solo 5 righe (@Data + campi); tutti i getter / setter / equals / hashCode / toString vengono generati automaticamente da Lombok in fase di compilazione. Rispetto ai POJO generati da template IDE o scritti a mano, la leggibilità del codice sorgente migliora di oltre l'80% e i costi di manutenzione si riducono di oltre il 60%. Nota: il progetto deve includere la dipendenza lombok (coordinate Maven / Gradle).
Un altro elemento distintivo è "Download ZIP multi-file + organizzazione automatica del percorso package": gli strumenti online tradizionali permettono solo di copiare e incollare una singola classe, mentre questo strumento consente di scaricare un archivio ZIP con un solo clic, contenente la struttura di directory organizzata in base al nome del package (ad esempio com/geekformat/pojo/); dopo l'estrazione è possibile importarlo in blocco nell'IDE tramite "Import Project", eliminando la necessità di creare manualmente le directory dei package.
Casi d'uso
- Sviluppo Android: convertire il JSON restituito dalle API backend in classi entità Java (POJO), con annotazioni opzionali Gson / Moshi / Fastjson / Jackson utilizzabili direttamente per la deserializzazione
- Backend Spring Boot: convertire rapidamente il JSON di esempio presente nella documentazione delle API in classi DTO / VO / Entity, sfruttando Lombok @Data per ridurre il codice
- Integrazione con API di terze parti: convertire il JSON di risposta delle API esterne nei modelli Java corrispondenti, scegliendo l'annotazione di serializzazione appropriata (Jackson / Fastjson / Gson) per un'integrazione senza soluzione di continuità
- Architettura a microservizi: unificare i modelli di dati di richiesta/risposta delle interfacce RPC, condividendo la stessa definizione delle classi Java tra più team
- Didattica e formazione: in corsi di strutture dati o lezioni Java, convertire JSON di esempio in POJO per dimostrare la modellazione orientata agli oggetti
- Redazione di documentazione API: incorporare esempi di classi entità Java nella documentazione Swagger / OpenAPI / Knife4j
- Preparazione di unit test: convertire i fixture JSON in classi Java, quindi deserializzare con Jackson per alimentare i dati di test
- Script di migrazione dati: convertire i file di configurazione JSON in classi Java per un accesso fortemente tipizzato nella logica di business
- Mock lato frontend: il backend converte prima il modello JSON in Java, mentre il frontend riceve in parallelo l'interfaccia TypeScript / il POJO Java corrispondente
- Code review: convertire direttamente il JSON restituito dalle API in POJO leggibili, per facilitare la discussione sui nomi dei campi durante la review
- Refactoring di progetti legacy: ristrutturare il codice basato sull'accesso dinamico a JSONObject in un accesso fortemente tipizzato basato su POJO
- Modellazione multi-ruolo Entity / DTO: dallo stesso JSON generare UserEntity (livello DB) + UserDTO (livello API) + UserVO (livello vista), scegliendo annotazioni diverse per ciascuno
- Integrazione con backend snake_case: API backend che restituiscono campi snake_case; lato Java frontend attivare "Converti in camelCase" + annotazioni Gson/Jackson per un'integrazione immediata
- DTO che richiedono persistenza: selezionare "Implementa Serializable" per utilizzarli direttamente nella cache Redis o nella memorizzazione di sessioni distribuite
Come utilizzare
- Incolla un oggetto JSON (consigliato) o un array nell'editor di sinistra, oppure fai clic su "Esempio" per caricare il sample cinese (con address / company / tags annidati)
- Fai clic sul pulsante "Impostazioni" nella barra degli strumenti (o sul pulsante con il nome della classe) e nella finestra popup seleziona: ① imposta il nome della classe radice (es. User) e il package (es. com.example.entity); ② scegli la libreria di annotazioni di serializzazione (Gson / Jackson / Fastjson / Lombok / Nessuna); ③ scegli lo stile del codice (toString / equals / hashCode / costruttore / Serializable); ④ scegli la strategia di denominazione dei campi (Mantieni invariato / camelCase / Tutto minuscolo / UPPER_SNAKE)
- Lo strumento esegue la conversione automatica entro 400 ms; a destra vengono mostrate tutte le classi Java generate (una scheda per classe, con badge in tempo reale per la libreria di annotazioni e Lombok); in caso di JSON non valido appare il pulsante "Correggi JSON"
- Verifica che i nomi delle classi, i nomi dei campi e le annotazioni siano quelli attesi; se necessario, modifica le chiavi del JSON sorgente o riapri le Impostazioni per regolare le opzioni
- Quando sei soddisfatto, fai clic sul pulsante "Copia" di una singola classe per incollarla nell'IDE, oppure fai clic su "Download ZIP" nella barra degli strumenti per scaricare tutte le classi con un solo clic (con struttura di directory organizzata per package)
Funzionalità
- 4 librerie di annotazioni di serializzazione: Gson (@SerializedName) / Jackson (@JsonProperty + @JsonFormat per date) / Fastjson (@JSONField) / Lombok (@Data), selezionabili con un interruttore
- Modalità Lombok @Data: genera automaticamente la combinazione @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor, riducendo la classe Java da ~50 righe a ~5 righe
- 4 strategie di denominazione dei campi: Mantieni invariato / snake_case a camelCase (user_name → userName) / Tutto minuscolo / stile costante UPPER_SNAKE
- Stile del codice liberamente combinabile: generazione opzionale di toString / equals / hashCode / costruttore senza argomenti / costruttore con tutti gli argomenti / implementazione dell'interfaccia Serializable
- Deduzione intelligente dei tipi: riconosce automaticamente String / Integer / Double / Boolean / List<Object> / tipi di oggetti annidati, senza dover specificare manualmente i tipi di campo
- Generazione automatica di classi annidate: gli oggetti annidati vengono convertiti in classi Java indipendenti (nominate con la prima lettera maiuscola), gli oggetti negli array vengono nominati seguendo la regola "rimuovi la 's' finale"
- Espansione automatica dei generics per gli array: gli array JSON vengono convertiti automaticamente in generics Java List<T>, con il tipo degli elementi dedotto dal primo elemento
- Modello POJO completo: genera un file .java completo con dichiarazione package + commento di intestazione (Copyright + timestamp di generazione automatica) + import + campi privati + getter/setter
- Download ZIP multi-file: tutte le classi generate sono organizzate per percorso package (es. com/example/entity/User.java), impacchettate in un ZIP scaricabile con un clic, inclusa la struttura delle directory
- Nome package + nome classe personalizzati: è possibile impostare liberamente il package (es. com.example.entity) e il nome della classe radice (es. User); tutti i nomi delle classi vengono generati in modo sincrono in base al nome della classe radice
- Controllo dell'indentazione: supporta il passaggio tra 2 / 4 spazi di indentazione sul lato destro, per adattarsi alle convenzioni di codice del team
- Copia di una singola classe: ogni classe Java generata ha un pulsante "Copia" indipendente, utile per incollare direttamente nell'IDE
- Conversione automatica + correzione errori: conversione automatica con debounce di 400 ms; in caso di errore JSON appare il pulsante "Correggi JSON" che ripara automaticamente gli errori di formato più comuni (virgole extra, apici singoli, ecc.)
- Dati di esempio + caricamento file: dati di esempio integrati in cinese (con address / company / tags / scores annidati), supporto per il trascinamento o il caricamento di file .json / .txt
- Cronologia locale: persistenza basata su localStorage delle ultime 200 voci inserite, con ripristino rapido dopo un aggiornamento o una chiusura accidentale della pagina
- Esecuzione nel browser locale: tutte le operazioni di parsing JSON, generazione Java e creazione ZIP vengono eseguite nel browser tramite JavaScript; i dati non vengono mai inviati a un server
Esempi di codice
Java: deserializzare un POJO generato da questo strumento con Jackson
javaCaso d'uso più comune in un progetto Spring Boot: deserializzare la risposta di un'API in un POJO generato da questo strumento tramite Jackson.
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) Call the API to get the JSON string
String json = httpClient.get("https://api.example.com/users/" + userId);
// 2) Deserialize directly into the POJO generated by this tool
User user = objectMapper.readValue(json, User.class);
// 3) Strongly-typed field access (compile-time type checking)
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: utilizzo di Lombok @Data + @Builder
javaModalità d'uso del codice generato in modalità Lombok: costruzione dell'oggetto tramite chiamate concatenate al builder; il POJO completo viene generato da Lombok in fase di compilazione.
import com.geekformat.pojo.User;
public class UserService {
public User createUser() {
// Lombok @Builder mode: chained calls, more intuitive than traditional setters
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 auto-generates toString():
// User(id=1, userName=Alice, email=alice@example.com, ...)
return user;
}
public boolean isValid(User user) {
// Lombok @Data auto-generates equals() and hashCode()
return user != null && user.getId() != null;
}
}
/*
* Corresponding pom.xml dependency:
* <dependency>
* <groupId>org.projectlombok</groupId>
* <artifactId>lombok</artifactId>
* <version>1.18.30</version>
* <scope>provided</scope>
* </dependency>
*/Riga di comando: estrarre lo ZIP scaricato da questo strumento e importarlo nell'IDE
bashIl file scaricato da questo strumento è un archivio ZIP (organizzato per percorso package); dopo l'estrazione può essere importato direttamente nell'IDE.
# 1) After downloading the ZIP (filename like User.zip)
unzip User.zip -d src/main/java/
# 2) Check the directory structure
tree src/main/java/
# src/main/java/
# └── com/
# └── example/
# └── entity/
# ├── User.java
# ├── Address.java
# └── Company.java
# 3) In IntelliJ IDEA: right-click the com directory -> "Mark Directory as" -> "Sources Root"
# Or in Eclipse: File -> Import -> Existing Projects into Workspace
# 4) Use directly in a Spring Boot project
# UserController.java
# @PostMapping("/users")
# public ResponseEntity<User> createUser(@RequestBody User user) {
# userService.save(user);
# return ResponseEntity.ok(user);
# }
# 5) Compile to verify
mvn compile
# [INFO] BUILD SUCCESS
# 6) (Optional) When using Lombok, remember to add the lombok dependency in pom.xml
# <dependency>
# <groupId>org.projectlombok</groupId>
# <artifactId>lombok</artifactId>
# </dependency>Domande frequenti
Le classi Java generate supportano le annotazioni Lombok?
Assolutamente sì. Nelle opzioni di generazione, puoi attivare il supporto Lombok e lo strumento genererà automaticamente codice con annotazioni @Data, @AllArgsConstructor, @NoArgsConstructor e altre, riducendo significativamente il codice boilerplate e rendendo le tue classi entità molto più pulite.
Può generare correttamente classi per JSON complessi con più livelli di annidamento?
Sì. Lo strumento integra un motore di analisi ricorsiva che analizza profondamente la struttura JSON. Quando incontra oggetti annidati, genera automaticamente le classi interne o separate corrispondenti, e gestisce tipi di collezioni generiche come List<T> e Map<K, V>, garantendo che il codice generato sia direttamente compilabile.
Come posso usare il codice generato direttamente con Spring Data JPA o Hibernate?
Nelle opzioni di generazione, puoi attivare il supporto JPA/Hibernate. Lo strumento aggiungerà automaticamente annotazioni @Column, @Table, @Id e altre ai campi, e dedurrà i tipi di database appropriati dai tipi di dati JSON, accelerando la configurazione del mapping ORM.
Come si converte un JSON in una classe Java POJO?
Incolla il contenuto JSON nell'editor di sinistra e lo strumento effettuerà la conversione automatica entro 400 ms; in alternativa, fai clic sul pulsante "Converti" nella barra degli strumenti. Al termine, a destra verranno mostrate tutte le classi Java generate, ciascuna con un pulsante "Copia" indipendente; fai clic su "Download ZIP" nella barra degli strumenti per impacchettare e scaricare tutte le classi con un solo clic.
Quali strutture di dati JSON sono supportate?
Sono supportate due strutture: ① Oggetto JSON (usato come classe radice, genera automaticamente public class RootBean { ... }); ② Array JSON (il primo oggetto dell'array viene usato come modello per la classe radice). Tutti gli oggetti annidati vengono elaborati ricorsivamente come classi indipendenti, e gli oggetti negli array vengono elaborati ricorsivamente come classi corrispondenti al tipo degli elementi della List.
Cosa contengono le classi Java generate?
Ogni file .java generato contiene: ① commento di intestazione (Copyright + timestamp di generazione automatica); ② dichiarazione package; ③ istruzioni import (inclusi List / Objects / Serializable / Gson / Jackson / Fastjson / Lombok, importati automaticamente in base alle necessità); ④ dichiarazione public class (con implements Serializable opzionale); ⑤ campi privati (private, con annotazioni se necessario); ⑥ metodi getter / setter standard (oppure solo annotazioni Lombok); ⑦ metodi toString / equals / hashCode opzionali. Il file è direttamente compilabile con javac.
Sono supportate le annotazioni Gson / Jackson / Fastjson / Lombok?
Sì. Nella finestra delle impostazioni, nel gruppo "Libreria di annotazioni di serializzazione", puoi scegliere: ① Gson (aggiunge @SerializedName("chiave originale") a ogni campo); ② Jackson (aggiunge @JsonProperty a ogni campo, e @JsonFormat per i campi data); ③ Fastjson (aggiunge @JSONField(name="chiave originale") a ogni campo); ④ Lombok (aggiunge @Data alla classe, con @Builder / @NoArgsConstructor / @AllArgsConstructor opzionali); ⑤ Nessuna annotazione (predefinito, solo POJO pulito). La libreria di annotazioni scelta importa automaticamente i package corrispondenti.
Che aspetto ha il codice generato con la modalità Lombok @Data?
Dopo aver attivato Lombok, la classe Java generata è notevolmente ridotta. Ad esempio, una class User con Lombok ha solo 5 righe: @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + dichiarazione dei campi. Tutti i getter / setter / equals / hashCode / toString vengono generati automaticamente da Lombok in fase di compilazione, migliorando significativamente la leggibilità del codice sorgente. Nota: il progetto deve includere la dipendenza Lombok (coordinate lombok in pom.xml / build.gradle) e l'IDE deve avere installato il plugin Lombok.
Come si convertono i nomi dei campi da snake_case a camelCase?
Nella finestra delle impostazioni, nel gruppo "Strategia di denominazione dei campi", seleziona la modalità "Converti in camelCase"; lo strumento convertirà automaticamente i nomi dei campi JSON da snake_case allo stile di denominazione consigliato in Java. Ad esempio: user_name → userName, created_at → createdAt, is_active → isActive. Se hai scelto le annotazioni Gson/Jackson/Fastjson, le annotazioni conserveranno la stringa snake_case originale, garantendo la corretta mappatura in fase di deserializzazione.
Come vengono gestiti gli oggetti JSON annidati?
Lo strumento crea automaticamente classi Java indipendenti per gli oggetti annidati. Regola di denominazione: la chiave dell'oggetto annidato viene convertita con la prima lettera maiuscola come nome della classe (es. address → Address); la chiave degli oggetti negli array viene privata della "s" finale e convertita con la prima lettera maiuscola (es. users → User). Tutte le classi annidate contengono campi completi + getter/setter + annotazioni.
I campi array vengono convertiti automaticamente in List?
Sì. I campi array nel JSON vengono convertiti automaticamente in generics Java List<T>, con il tipo degli elementi dedotto dal primo elemento dell'array. Ad esempio: ["a","b","c"] → List<String>; [{...},{...}] → List<User> (User è una nuova classe nominata in base alla chiave); un array vuoto [] dà come risultato predefinito List<Object>.
Come si modificano il nome della classe radice e il nome del package?
Nell'angolo in alto a destra della barra degli strumenti c'è un pulsante "Impostazioni" (o un pulsante con il nome della classe); facendo clic si apre una finestra di dialogo in cui è possibile impostare: ① nome della classe radice (predefinito: JsonRootBean); ② nome del package (predefinito: com.geekformat.pojo). Dopo la modifica, tutti i nomi delle classi generate vengono aggiornati in modo sincrono e la struttura delle directory nel file ZIP viene riorganizzata in base al percorso del package.
Il download è un singolo file .java o un archivio ZIP?
Il download è un archivio ZIP (JsonRootBean.zip) che contiene tutte le classi Java generate, organizzate in directory secondo il percorso del package. Ad esempio, con il package com.geekformat.pojo, la struttura dei file nel ZIP sarà: com/geekformat/pojo/JsonRootBean.java, com/geekformat/pojo/Address.java, ecc. È possibile usare il comando unzip oppure importare direttamente nell'IDE.
Posso copiare una singola classe direttamente nell'IDE?
Sì. Ogni classe Java generata viene visualizzata come una scheda indipendente con un pulsante "Copia" nell'angolo in alto a destra; facendo clic, l'intero codice della classe (incluso package + import + definizione della classe + campi + annotazioni + getter/setter) viene copiato negli appunti e può essere incollato direttamente in IntelliJ IDEA / Eclipse / VS Code.
Come si genera il pattern Lombok Builder con @Builder?
Nella finestra delle impostazioni, nel gruppo "Stile del codice": ① seleziona "Usa Lombok @Data per semplificare il codice" (verrà attivata automaticamente la libreria di annotazioni lombok); ② seleziona "Genera il pattern Builder @Builder". La classe generata aggiungerà automaticamente l'annotazione @Builder, con modalità d'uso: User user = User.builder().id(1).name("Alice").build();
Come si fa in modo che la classe generata implementi l'interfaccia Serializable?
Nella finestra delle impostazioni, nel gruppo "Stile del codice", seleziona "Implementa interfaccia Serializable"; lo strumento aggiungerà automaticamente implements Serializable alla dichiarazione della classe e importerà java.io.Serializable. Ideale per scenari in cui è necessario scrivere il POJO su file, trasmetterlo in rete o memorizzarlo nella cache Redis.
Qual è la differenza tra JSON in Java e JSON in TypeScript?
Entrambi convertono JSON nelle definizioni di tipo del linguaggio corrispondente, ma con focus diversi: ① Java genera classi POJO complete (con package + import + campi private + getter/setter), direttamente compilabili ed eseguibili; ② TypeScript genera dichiarazioni interface o type, che descrivono solo la struttura dei dati senza implementazione. La scelta dipende dal linguaggio di sviluppo.
Il codice generato può essere usato in un progetto Spring Boot?
Sì. Le classi POJO generate da questo strumento sono conformi alle specifiche Java Bean standard (campi private + getter/setter) e sono compatibili con la deserializzazione Jackson di Spring Boot, il binding dei form MVC e la definizione di entità JPA (manuale). Per la semplificazione con Lombok (@Data / @Builder), è possibile attivarlo con un solo clic nella finestra delle impostazioni, senza necessità di refactoring nell'IDE.
Cosa fare se il JSON non è valido?
Lo strumento rileva automaticamente la validità del JSON; in caso di errore, a destra viene mostrato un messaggio di errore in rosso insieme al pulsante "Correggi JSON". Facendo clic, è possibile correggere automaticamente gli errori più comuni: ① virgole extra alla fine; ② sostituzione di apici singoli con doppi apici; ③ aggiunta di apici mancanti alle chiavi; ④ rimozione dei commenti. Dopo la correzione, è possibile convertire e generare direttamente le classi Java.
I dati vengono caricati su un server? Quanto è sicura la privacy?
Lo strumento viene eseguito interamente nel browser locale. Tutte le operazioni di parsing JSON, generazione delle classi Java e creazione del file ZIP vengono eseguite nel browser tramite JavaScript (JSZip); i dati JSON inseriti e il codice Java generato non vengono mai caricati su alcun server, né registrati o memorizzati nel cloud. È possibile usarlo in tranquillità anche con JSON sensibili contenenti campi di interfacce interne, strutture aziendali non ancora rilasciate o risposte API riservate; chiudendo la pagina tutti i dati vengono eliminati.
Lo strumento rallenta con un JSON molto grande da 10.000 righe?
Lo strumento non ha un limite esplicito di righe, ma il browser può diventare più lento nel parsing e nel rendering di JSON molto grandi. Si consiglia di: ① suddividere il JSON ed eseguire conversioni in batch; ② concentrarsi su un solo livello di annidamento alla volta; ③ se è necessario generare 100+ classi in batch, è preferibile usare direttamente i plugin di generazione codice dell'IDE (come MyBatis Generator, MapStruct) o librerie dedicate di generazione codice Java (JavaPoet / JOOQ).
Risoluzione dei problemi
Messaggio "Inserisci dati JSON" o errore simile
L'editor di sinistra è vuoto o contiene solo spazi. Assicurati di aver incollato un contenuto JSON valido, oppure fai clic su "Esempio" per caricare il sample cinese, o fai clic su "Carica" per selezionare un file .json / .txt.
Messaggio "Unexpected token ... in JSON at position N"
JSON non valido. Cause comuni: ① virgola extra alla fine (es. {"a":1,}); ② apici singoli anziché doppi; ③ sintassi da oggetto JS (es. {key: value}) anziché JSON (es. {"key": "value"}). Facendo clic sul pulsante "Correggi JSON" è possibile correggere automaticamente parte degli errori.
Le annotazioni generate non corrispondono al framework utilizzato nel progetto
Nella finestra delle impostazioni, nel gruppo "Libreria di annotazioni di serializzazione", cambia libreria: ① Jackson per progetti Spring Boot; ② Gson per progetti Android; ③ Fastjson per backend Java in stile Alibaba; ④ Lombok per semplificare il codice; ⑤ "Nessuna annotazione" se non si vuole introdurre alcuna libreria di annotazioni. Dopo il cambio, tutte le annotazioni dei campi e gli import verranno rigenerati automaticamente.
Errore di compilazione Lombok "simbolo non trovato"
Il progetto non include la dipendenza Lombok. Aggiungi a pom.xml: `<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency>`; inoltre, l'IDE richiede l'installazione del plugin Lombok (IntelliJ IDEA → Plugins → cerca Lombok → Install).
Vuoi generare codice compatto senza Lombok
Nella finestra delle impostazioni, deseleziona Lombok @Data e usa la modalità tradizionale mantenendo il codice compatto: ① seleziona "Genera costruttore senza argomenti" + "Genera costruttore con tutti gli argomenti" + "Genera toString / equals / hashCode"; ② il team può usare nell'IDE i template Postfix Completion (in IntelliJ: .var / .field) per generare in batch. In alternativa, usa la funzione integrata di generazione POJO dell'IDE (Alt+Insert → Constructor / Getter / Setter).
Dopo la conversione snake_case → camelCase, l'IDE segnala "simbolo non trovato"
"Converti in camelCase" modifica solo i nomi dei campi, mentre i getter/setter generati automaticamente da Lombok @Data seguono i nuovi nomi (es. user_name → userName → getUserName / setUserName), quindi il codice è corretto. Se l'errore persiste, verifica: ① che l'IDE abbia ricompilato correttamente; ② che il plugin Lombok sia installato e abilitato; ③ svuota la cache dell'IDE (File → Invalidate Caches).
Il nome della classe per un oggetto annidato non è quello desiderato (es. categories nominato Categori)
Lo strumento applica la regola "rimuovi la s finale + prima lettera maiuscola" agli oggetti negli array, gestendo in modo non ottimale plurali irregolari come categories. Si consiglia di: ① modificare la chiave del JSON sorgente al singolare (es. categories → category); ② oppure, dopo la generazione, rinominare la classe nell'IDE con la funzione Rename (aggiornando contemporaneamente tutti i riferimenti).
La struttura delle directory nello ZIP estratto non è corretta
Le directory nello ZIP sono organizzate in base al package impostato (predefinito com/geekformat/pojo/). Se la posizione dopo l'estrazione non è corretta, puoi: ① modificare il nome del package (es. com.example) e riscaricare; ② usare unzip -d src/main/java per specificare la directory di estrazione; ③ oppure aprire nell'IDE l'intera cartella estratta con File → Open.
Errore di deserializzazione dei campi data in modalità Jackson
Lo strumento rileva automaticamente le stringhe di data ISO 8601 nel formato "2026-07-08T10:00:00.000Z" e aggiunge @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"). Se il formato della data è diverso (es. "2026-07-08"), puoi: ① usare il formato ISO 8601 nel JSON sorgente; ② oppure, dopo la generazione, modificare manualmente il parametro pattern di @JsonFormat.
Caratteri illeggibili nei nomi dei file cinesi nello ZIP su Windows
I nomi dei file ZIP e i nomi delle classi Java sono in inglese (caratteri ASCII) per impostazione predefinita, quindi non si verificano problemi di codifica. Se il JSON sorgente contiene chiavi cinesi (nomi di campi generati in cinese), l'IDE potrebbe segnalare convenzioni di denominazione non standard ma senza problemi di codifica. Si consiglia di convertire le chiavi JSON in inglese (notazione camelCase), più conformi alle convenzioni di codifica Java.
Rallentamenti della pagina generando 100+ classi annidate
Lo strumento non ha un limite esplicito sul numero di classi, ma le prestazioni di rendering del DOM del browser peggiorano sensibilmente con strutture molto grandi. Si consiglia di: ① suddividere il JSON in più moduli indipendenti e convertirli separatamente; ② oppure usare direttamente nell'IDE gli strumenti di generazione codice integrati (in IntelliJ: il plugin JSON to POJO); ③ il livello di annidamento non dovrebbe superare 6 livelli; in caso contrario si consiglia di ristrutturare il JSON.
Un array di numeri viene generato come List<Object>
In genere ciò accade quando l'array è vuoto [] e il valore predefinito dedotto è List<Object>. Aggiungi almeno un elemento di esempio nel JSON sorgente (es. [1,2,3]); lo strumento dedurrà il tipo in base al primo elemento; in alternativa, dopo la generazione modifica manualmente List<Object> in List<Integer>.
Un campo con valore null viene generato come tipo Object
I valori null nel JSON vengono dedotti di default come tipo Object dallo strumento (poiché non è possibile determinare il tipo effettivo). Si tratta di una scelta sicura per evitare errori di valutazione. Se conosci il tipo, puoi assegnare un valore di esempio a quel campo nel JSON sorgente (es. "field": "" per dedurre String), quindi eliminare il valore di esempio dopo la generazione.
Dopo la modifica del nome del package, la struttura delle directory nello ZIP non viene aggiornata
Dopo la modifica del package, è necessario fare di nuovo clic sul pulsante "Converti" (oppure attendere 400 ms per l'attivazione automatica). Quando la finestra delle impostazioni viene chiusa, al successivo cambio di input lo strumento rigenererà tutti i file con il nuovo nome del package.
Vuoi rimuovere il commento di intestazione generato automaticamente (es. Copyright)
Per impostazione predefinita lo strumento genera un commento di intestazione contenente Copyright + timestamp di generazione automatica. Se non lo desideri, puoi eliminarlo nell'IDE con un Find & Replace globale, oppure modificare la funzione generateFileHeader nel codice sorgente dello strumento (richiede un nuovo deploy).
Vuoi realizzare una conversione "backend snake_case + frontend Java"
Scenario tipico: l'API backend (es. servizi Python / Go) restituisce campi snake_case, mentre il sistema Java frontend richiede campi camelCase. Passi: ① nella finestra delle impostazioni scegli la libreria di annotazioni Jackson o Gson; ② seleziona la strategia di denominazione "Converti in camelCase"; ③ lo strumento genererà automaticamente: nome del campo = userName (camelCase), valore dell'annotazione = "user_name" (mantiene la chiave originale); in fase di deserializzazione la mappatura avverrà tramite l'annotazione, mentre l'accesso seguirà le convenzioni di denominazione Java.
Glossario
- POJO
- Plain Old Java Object, normale oggetto Java. Vincoli: campi private + getter/setter pubblici + nessuna dipendenza da framework. Lo strumento genera POJO standard.
- JavaBean
- Termine storico della comunità Java per indicare i POJO, che richiede: costruttore pubblico senza argomenti + campi private + getter/setter pubblici. Le classi generate da questo strumento sono conformi alle specifiche JavaBean.
- DTO (Data Transfer Object)
- Oggetto per il trasferimento di dati, spesso usato come veicolo per dati tra processi (API / RPC). I POJO generati da questo strumento possono essere utilizzati come DTO.
- VO (Value Object)
- Value Object, generalmente usato per il livello di vista (dati restituiti dal Controller al frontend). I POJO generati da questo strumento sono ugualmente adatti.
- Entity
- Oggetto entità, corrispondente a una riga di una tabella del database. I POJO generati da questo strumento possono essere usati come classe base @Entity per JPA / Hibernate (dopo l'aggiunta manuale delle annotazioni).
- @SerializedName
- Annotazione di mappatura dei campi della libreria Gson. In modalità Gson, lo strumento aggiunge automaticamente @SerializedName("chiave originale") a ogni campo, garantendo la mappatura con il nome del campo JSON originale in fase di deserializzazione.
- @JsonProperty
- Annotazione di mappatura dei campi della libreria Jackson. In modalità Jackson, lo strumento aggiunge automaticamente @JsonProperty("chiave originale") a ogni campo; per i campi data aggiunge inoltre @JsonFormat per definire il formato di serializzazione.
- @JSONField
- Annotazione di mappatura dei campi della libreria Fastjson di Alibaba. In modalità Fastjson, lo strumento aggiunge automaticamente @JSONField(name = "chiave originale") a ogni campo.
- Lombok @Data
- Annotazione composita della libreria Lombok, equivalente a @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor. In modalità Lombok, lo strumento aggiunge questa annotazione alla classe con un solo clic.
- Lombok @Builder
- Annotazione di Lombok per il pattern Builder. Una volta selezionata, lo strumento la aggiunge automaticamente, generando un metodo builder() richiamabile in modo concatenato.
- Serializable
- Interfaccia marker di Java; una volta implementata, l'oggetto può essere serializzato (ad esempio scritto su file / trasmesso in rete / memorizzato nella cache Redis). Selezionando "Implementa Serializable" nello strumento, vengono aggiunti automaticamente implements Serializable e l'import di java.io.Serializable.
- Classe annidata (Nested Class)
- Classe Java indipendente generata automaticamente dallo strumento per oggetti JSON annidati. Regola di denominazione: la chiave dell'oggetto annidato viene convertita con la prima lettera maiuscola (es. address → Address).
- List generico
- Interfaccia del Java Collection Framework. Lo strumento converte automaticamente gli array JSON in List<T>, dove T viene dedotto dal primo elemento dell'array (es. ["a"] → List<String>).
- getter / setter
- Metodi di accesso standard dei Java Bean. Il getter è nominato getXxx() e restituisce il campo, il setter è nominato setXxx(value) e imposta il campo. In modalità Lombok vengono generati automaticamente da @Data; in modalità tradizionale li genera esplicitamente lo strumento.
- Dichiarazione package
- Prima riga di codice non commento in un file Java, usata per dichiarare il namespace a cui appartiene la classe. Lo strumento la genera automaticamente in base al package impostato dall'utente e organizza lo ZIP con directory com/xxx/yy.
- snake_case → camelCase
- Conversione della strategia di denominazione dei campi. Lo strumento supporta la conversione automatica: user_name → userName, is_active → isActive, created_at → createdAt, in conformità con le convenzioni di denominazione Java.
- JSZip
- Libreria JavaScript per la creazione di archivi ZIP lato browser. Lo strumento la utilizza per generare file ZIP direttamente nel browser, senza necessità di elaborazione lato server.
- Cronologia localStorage
- Archivio chiave-valore locale del browser (capacità circa 5-10 MB). Lo strumento utilizza localStorage per memorizzare in modo persistente le ultime 200 voci inserite.
- Debounce
- Tecnica di ottimizzazione delle prestazioni frontend: unisce eventi ad alta frequenza in un'unica esecuzione finale. Lo strumento imposta un debounce di 400 ms per evitare rallentamenti nel parsing di file di grandi dimensioni.
- tryFixJSON
- Funzione di correzione JSON integrata nello strumento: corregge automaticamente errori comuni come virgole extra alla fine, sostituzione di apici singoli con doppi apici, aggiunta di apici mancanti alle chiavi e rimozione di commenti.
Tabella di mappatura rapida da tipo JSON a tipo Java
Tabella di confronto tra i tipi di dati JSON dedotti automaticamente dallo strumento e i tipi Java corrispondenti:
| Esempio valore JSON | Metodo di rilevamento | Tipo Java generato | Valore predefinito del campo |
|---|---|---|---|
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 |
[...] (array vuoto) | 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<>() |
{...} (oggetto annidato) | typeof value === 'object' && !Array.isArray(value) | Xxx (classe indipendente) | new Xxx() |
Tabella di confronto tra 4 librerie di annotazioni di serializzazione
Le 4 principali librerie di annotazioni di serializzazione JSON per Java supportate dallo strumento; scegliere in base al framework utilizzato nel progetto:
| Libreria di annotazioni | Annotazione generata | Import automatico | Scenario di utilizzo |
|---|---|---|---|
Nessuna annotazione | Nessuna (POJO pulito) | Nessuno | Scenari senza dipendenze da framework; richiede deserializzazione manuale tramite librerie generiche come jackson-databind |
Gson | @SerializedName("user_name") | import com.google.gson.annotations.SerializedName; | Applicazioni Android, ecosistema Gson di Google, Retrofit + Gson |
Jackson | @JsonProperty("user_name") + @JsonFormat per campi data | import com.fasterxml.jackson.annotation.JsonProperty; + JsonFormat | Framework di serializzazione predefinito di Spring Boot, API backend Web |
Fastjson | @JSONField(name = "user_name") | import com.alibaba.fastjson.annotation.JSONField; | Ecosistema Alibaba, sistemi Java interni, scenari di deserializzazione ad alte prestazioni |
Lombok | @Data a livello di classe (+ @Builder / @NoArgsConstructor / @AllArgsConstructor opzionali) | import lombok.Data; (+ altri) | Tutti i progetti che necessitano di ridurre il codice boilerplate; utilizzabile in combinazione con qualsiasi libreria di serializzazione |
Tabella di confronto tra 4 strategie di denominazione dei campi
Le 4 strategie di conversione dei nomi dei campi supportate dallo strumento, ottimizzate per diverse origini JSON:
| Strategia | Esempio di input | Nome campo Java in output | Scenario di utilizzo |
|---|---|---|---|
Mantieni invariato | user_name | user_name | I nomi dei campi JSON sono già conformi alle convenzioni Java (es. API interne); oppure il team preferisce lo stile snake_case |
Converti in camelCase | user_name | userName | Stile di denominazione consigliato in Java; API backend con naming snake_case (es. backend Python / Go) |
Tutto minuscolo | UserName | username | Integrazione con campi di database particolari (caso raro) |
UPPER_SNAKE | user_name | USER_NAME | Definizione di costanti Java (public static final); generalmente sconsigliato per i campi dei POJO |
Confronto tra modalità Lombok @Data e modalità POJO tradizionale
Confronto tra i due stili di codice in termini di righe, leggibilità e dipendenze:
| Aspetto | Modalità Lombok @Data | Modalità POJO tradizionale |
|---|---|---|
Numero di righe di codice | ~5 righe (4 annotazioni + campi) | ~50 righe (4-5 righe per getter/setter per ogni campo + classe) |
Leggibilità | Molto alta (tutti i campi e le annotazioni visibili a colpo d'occhio) | Media (molto codice boilerplate) |
Prodotto della compilazione | Bytecode completo (generato da IDE / javac tramite il processore Lombok) | Bytecode completo (compilazione diretta) |
Dipendenze a runtime | Richiede la dipendenza lombok (in fase di compilazione) | Nessuna dipendenza aggiuntiva |
Supporto IDE | Richiede l'installazione del plugin Lombok (IntelliJ / Eclipse) | Supporto nativo |
Costi di manutenzione del codice | Bassi (basta aggiungere un campo) | Alti (ogni campo richiede l'aggiunta manuale di getter/setter) |
Team adatto | Progetti medio-grandi che hanno già introdotto Lombok | Progetti che rifiutano le annotazioni Lombok; manutenzione di progetti legacy |
Privacy & Security
Tutte le operazioni di parsing JSON, generazione delle classi Java e creazione dell'archivio ZIP di questo strumento JSON in Java vengono eseguite interamente nel tuo browser locale tramite JavaScript (JSZip); i dati JSON inseriti e il codice Java generato non vengono mai caricati su alcun server, né registrati, memorizzati nella cache o archiviati nel cloud. È possibile usarlo in tranquillità anche con JSON sensibili contenenti campi di interfacce interne, strutture aziendali non ancora rilasciate o risposte API riservate; chiudendo la pagina tutti i dati vengono eliminati.
Authoritative References
- MDNMDN - JSON.parse / JSON.stringify
- OracleOracle Java Tutorial - Classi e oggetti
- OracleOracle Java Tutorial - Incapsulamento
- LombokDocumentazione ufficiale Lombok - @Data
- LombokDocumentazione ufficiale Lombok - @Builder
- JacksonDocumentazione ufficiale Jackson - ObjectMapper
- GoogleGuida utente Gson
- AlibabaFastjson su GitHub
- SpringSpring Boot ufficiale - @RequestBody
- Compressione JSON
- CSV in JSON
- JSON to CSV
- JSON Diff
- JSON Escape / Unescape
- Appiattimento JSON
- Formattatore JSON
- Generatore JSON
- Query JSONPath
- Unire JSON
- Riparare JSON
- Validatore di Schema JSON
- Ordinare JSON
- JSON Stringify
- JSON in HTML
- JSON in Java
- JSON to Markdown
- JSON in SQL
- JSON in TOML
- JSON in TypeScript
- XML in JSON
- JSON in XML
- YAML in JSON
- Da JSON a YAML
- JSON in Python
- JSON in Go
- JSON in Rust
- JSON in Swift
- JSON a C#
- JSON a C++
- JSON to PHP