JSON in Classe Java

Genera classi Java POJO da JSON

Prova un esempio
Nome classe root:

Input JSON

Output Java

Esegue in locale · Sicuro per incollare segreti
Le classi Java appariranno qui…

Cos'è la conversione da JSON a classe Java?

La conversione da JSON a classe Java prende un oggetto JSON grezzo e produce definizioni Plain Old Java Object (POJO) con campi privati, getter e setter. Java non ha un sistema di tipi JSON integrato, quindi ogni risposta API JSON, file di configurazione o payload di messaggi ha bisogno di una classe corrispondente prima di poterlo usare in modo type-safe. Librerie come Jackson e Gson mappano le chiavi JSON ai campi Java tramite reflection, ma richiedono che le definizioni delle classi esistano prima.

Un POJO Java standard per la deserializzazione JSON dichiara un campo privato per ogni chiave JSON, un costruttore senza argomenti e una coppia getter/setter per campo. Gli oggetti JSON annidati diventano classi separate. Gli array diventano campi List<T> con un import java.util.List. I tipi JSON primitivi si mappano ai primitivi Java (int, double, boolean) o ai loro tipi wrapper (Integer, Double, Boolean) quando usati all'interno dei generics. I valori null si mappano tipicamente a Object o a un tipo riferimento nullable.

Scrivere queste definizioni di classi a mano è ripetitivo. Bisogna leggere ogni chiave JSON, determinare il tipo Java dal valore, convertire le convenzioni di denominazione dal camelCase JSON ai campi Java in camelCase, creare nomi di classe in PascalCase per gli oggetti annidati e aggiungere il codice boilerplate di getter e setter. Per un oggetto JSON con 15 campi e 3 oggetti annidati, significa scrivere 4 classi, 30+ metodi e mantenere tutto coerente. Un convertitore lo fa in millisecondi.

Perché usare un convertitore da JSON a Java?

Creare manualmente POJO Java da JSON significa ispezionare ogni campo, dedurre i tipi dai valori di esempio, scrivere coppie getter/setter e ripetere il processo per ogni oggetto annidato. Quando il contratto API cambia, aggiorni tutto a mano. Un convertitore elimina quel lavoro meccanico.

Generazione POJO istantanea
Incolla il JSON e ottieni definizioni complete di classi Java in meno di un secondo. Oggetti annidati, liste e tipi primitivi vengono rilevati e mappati automaticamente.
🔒
Elaborazione con privacy garantita
La conversione avviene interamente nel browser tramite JavaScript. I tuoi dati JSON non lasciano mai il tuo computer. Chiavi API, token e dati di produzione restano privati.
📝
Inferenza corretta dei tipi
Ogni campo generato usa il tipo Java appropriato dedotto dal valore JSON: String, int, double, boolean, List<T> o Object per i null. I tipi wrapper vengono usati all'interno dei generics.
📦
Nessuna installazione o registrazione
Apri la pagina e incolla il tuo JSON. Nessun JDK, nessuna dipendenza Maven, nessun account. Funziona su qualsiasi dispositivo con un browser.

Casi d'uso di JSON in Java

Sviluppo API Spring Boot
Genera DTO di richiesta e risposta da esempi JSON delle API. Incolla la forma del payload atteso e ottieni classi Java pronte per le annotazioni @RequestBody e @ResponseBody nei controller Spring.
Sviluppo di app Android
Crea classi modello per le risposte di rete di Retrofit o Volley. Incolla il JSON restituito dalla tua API backend e ottieni POJO compatibili con i convertitori Gson o Moshi.
Integrazione tra microservizi
Definisci classi di messaggi tipizzati per payload JSON di Kafka, RabbitMQ o gRPC. Incolla un messaggio di esempio e genera POJO che documentano il contratto atteso tra i servizi.
Migrazione di sistemi legacy
Converti risposte API JSON in classi Java quando si racchiudono endpoint REST in un client tipizzato. Utile quando si migra da pattern Map<String, Object> scarsamente tipizzati a domain model corretti.
QA e automazione dei test
Costruisci fixture di test tipizzate da esempi di risposta API. I tecnici QA possono incollare risposte JSON reali e produrre definizioni POJO da usare in suite di test JUnit o TestNG con asserzioni AssertJ.
Apprendimento dei pattern OOP in Java
Gli studenti possono incollare qualsiasi struttura JSON e vedere come Java la rappresenta con classi, campi, getter, setter e tipi annidati. L'output lo rende concreto anziché astratto.

Mappatura dei tipi da JSON a Java

Ogni valore JSON si mappa a un tipo Java specifico. La tabella seguente mostra come il convertitore traduce ogni tipo JSON nel suo equivalente Java. La colonna Alternativa mostra i tipi wrapper usati in contesti generici come List<T>, o le funzionalità Java più recenti come i Record.

Tipo JSONEsempioTipo JavaAlternativa
string"hello"StringString
number (integer)42intint / Integer
number (float)3.14doubledouble / Double
booleantruebooleanboolean / Boolean
nullnullObjectObject (or @Nullable String)
object{"k": "v"}NestedClassRecord (Java 16+)
array of strings["a", "b"]List<String>List<String>
array of objects[{"id": 1}]List<Item>List<Item>
mixed array[1, "a"]List<Object>List<Object>

Riferimento alle annotazioni JSON Java

Quando si deserializza JSON con Jackson o Gson, le annotazioni controllano come le chiavi JSON si mappano ai campi Java, come vengono gestiti i campi sconosciuti e come vengono trattati i valori null. Questo riferimento copre le annotazioni che incontrerai più spesso quando lavori con POJO generati.

AnnotazioneScopoLibreria
@JsonProperty("name")Maps a JSON key to a Java field with a different nameJackson
@SerializedName("name")Same as @JsonProperty, but for the Gson libraryGson
@JsonIgnorePropertiesIgnores unknown JSON keys during deserialization instead of failingJackson
@NullableMarks a field as accepting null values from JSON inputJSR 305 / JetBrains
@NotNullEnforces that a field must not be null, throws on violationBean Validation
@JsonFormat(pattern=...)Defines a date/time format for serialization and deserializationJackson

POJO vs Record vs Lombok

Java ha tre approcci comuni per definire strutture tipizzate che contengono dati JSON. Ognuno si adatta a un diverso stile di progetto e versione Java. I POJO sono il pattern tradizionale con la più ampia compatibilità. I Record riducono il codice boilerplate per i dati immutabili. Lombok genera getter, setter e costruttori al momento della compilazione tramite annotazioni.

POJO
Pattern Java tradizionale. Funziona con Java 8+. Definisci campi privati più metodi getter/setter. Pieno controllo sulla mutabilità e sulla logica personalizzata. Compatibile con ogni libreria JSON (Jackson, Gson, Moshi). La scelta standard per Spring Boot, Android e codebase enterprise.
Record (Java 16+)
Integrato da Java 16 (anteprima in 14). Sintassi compatta: record User(int id, String name) genera costruttore, accessori, equals, hashCode e toString. Le istanze sono immutabili. Jackson supporta i record dalla versione 2.12. Ideale per oggetti valore e DTO dove non hai bisogno di setter.
Lombok @Data
Processore di annotazioni a tempo di compilazione di terze parti. @Data genera getter, setter, equals, hashCode e toString. @Builder aggiunge un pattern builder. Riduce il boilerplate a livelli prossimi ai record mantenendo la mutabilità. Richiede l'aggiunta di Lombok al tuo strumento di build (Maven/Gradle) e al plugin IDE.

Esempi di codice

Questi esempi mostrano come usare i POJO Java generati con Jackson per la deserializzazione, come produrre classi Java in modo programmatico da JavaScript e Python, e come usare lo strumento CLI jsonschema2pojo per la generazione in batch.

Java (Jackson deserialization)
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;
    private String email;
    private boolean active;
    private double score;
    private Address address;
    private List<String> tags;

    // getters and setters omitted for brevity

    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Alice\",\"email\":\"alice@example.com\",\"active\":true,\"score\":98.5,\"address\":{\"street\":\"123 Main St\",\"city\":\"Springfield\",\"zip\":\"12345\"},\"tags\":[\"admin\",\"user\"]}";
        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);
        System.out.println(user.getName()); // -> Alice
    }
}

class Address {
    private String street;
    private String city;
    private String zip;
    // getters and setters
}
JavaScript (generate Java POJO from JSON)
// Minimal JSON-to-Java-POJO generator in JS
function jsonToJava(obj, name = "Root") {
  const classes = [];
  function infer(val, fieldName) {
    if (val === null) return "Object";
    if (typeof val === "string") return "String";
    if (typeof val === "number") return Number.isInteger(val) ? "int" : "double";
    if (typeof val === "boolean") return "boolean";
    if (Array.isArray(val)) {
      const first = val.find(v => v !== null);
      if (!first) return "List<Object>";
      const elem = infer(first, fieldName);
      const boxed = elem === "int" ? "Integer" : elem === "double" ? "Double" : elem === "boolean" ? "Boolean" : elem;
      return `List<${boxed}>`;
    }
    if (typeof val === "object") {
      const cls = fieldName.charAt(0).toUpperCase() + fieldName.slice(1);
      build(val, cls);
      return cls;
    }
    return "Object";
  }
  function build(obj, cls) {
    const fields = Object.entries(obj).map(([k, v]) => {
      const type = infer(v, k);
      return `    private ${type} ${k};`;
    });
    classes.push(`public class ${cls} {\n${fields.join("\n")}\n}`);
  }
  build(obj, name);
  return classes.join("\n\n");
}

console.log(jsonToJava({ id: 1, name: "Alice", scores: [98, 85] }, "User"));
// public class User {
//     private int id;
//     private String name;
//     private List<Integer> scores;
// }
Python (generate Java classes from JSON)
import json

def json_to_java(obj: dict, class_name: str = "Root") -> str:
    classes = []

    def infer(val, name):
        if val is None:
            return "Object"
        if isinstance(val, bool):
            return "boolean"
        if isinstance(val, int):
            return "int"
        if isinstance(val, float):
            return "double"
        if isinstance(val, str):
            return "String"
        if isinstance(val, list):
            if not val:
                return "List<Object>"
            elem = infer(val[0], name)
            boxed = {"int": "Integer", "double": "Double", "boolean": "Boolean"}.get(elem, elem)
            return f"List<{boxed}>"
        if isinstance(val, dict):
            cls = name[0].upper() + name[1:]
            build(val, cls)
            return cls
        return "Object"

    def build(obj, cls):
        fields = [f"    private {infer(v, k)} {k};" for k, v in obj.items()]
        classes.append(f"public class {cls} {{\n" + "\n".join(fields) + "\n}")

    build(obj, class_name)
    return "\n\n".join(classes)

data = json.loads('{"id": 1, "name": "Alice", "tags": ["admin"]}')
print(json_to_java(data, "User"))
# public class User {
#     private int id;
#     private String name;
#     private List<String> tags;
# }
CLI (jsonschema2pojo)
# Install jsonschema2pojo (requires Java 8+)
# Download from https://github.com/joelittlejohn/jsonschema2pojo

# Generate POJOs from a JSON file
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style jackson2

# Generate with Gson annotations instead
jsonschema2pojo --source user.json --target src/main/java \
  --source-type json --annotation-style gson

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice", "tags": ["admin"]}' | \
  jsonschema2pojo --source-type json --annotation-style jackson2 \
  --target src/main/java --target-package com.example.model

Domande frequenti

Qual è la differenza tra un POJO e un Java Bean?
Un POJO (Plain Old Java Object) è qualsiasi semplice classe Java senza dipendenze da framework. Un Java Bean è un POJO che segue convenzioni specifiche: un costruttore senza argomenti, campi privati con getter e setter pubblici, e implementa Serializable. Per la mappatura JSON, la maggior parte delle librerie richiede le convenzioni Bean (getter/setter) ma non richiede Serializable. Le classi generate da questo strumento seguono il pattern getter/setter Bean.
Quale libreria JSON dovrei usare con i POJO generati?
Jackson (com.fasterxml.jackson) è la libreria JSON Java più usata e quella predefinita in Spring Boot. Gson (com.google.gson) è popolare nei progetti Android e ha un'API più semplice. Moshi è un'alternativa più recente di Square, progettata per l'interoperabilità con Kotlin. Tutte e tre funzionano con POJO standard che hanno getter e setter.
Come gestisce il convertitore gli oggetti JSON annidati?
Ogni oggetto annidato diventa una classe Java separata. Se un campo JSON chiamato "address" contiene un oggetto con le chiavi "street" e "city", il convertitore crea una classe Address con quei campi e tipizza il campo padre come Address. Le strutture profondamente annidate producono più definizioni di classi.
Cosa succede quando un campo JSON è null?
I campi null vengono tipizzati come Object perché il convertitore non può dedurre il tipo previsto da un solo valore null. In pratica, dovresti sostituire Object con il tipo atteso (String, Integer, ecc.) una volta che conosci il contratto API. Se usi Jackson, i valori null vengono assegnati ai campi di tipo riferimento per impostazione predefinita senza errori.
Dovrei usare i Java Record invece dei POJO per JSON?
I Record funzionano bene per gli oggetti di trasferimento dati immutabili dove non hai bisogno di setter. Jackson supporta i record dalla versione 2.12, e Gson ha aggiunto il supporto nelle versioni successive. Se il tuo progetto gira su Java 16+ e tratti le risposte API come dati di sola lettura, i record riducono il boilerplate. Se hai bisogno di mutabilità o punti a Java 8/11, usa i POJO.
Come gestisco le chiavi JSON che non sono identificatori Java validi?
Chiavi JSON come "first-name" o "2nd_place" non sono nomi di campo Java validi. Usa @JsonProperty("first-name") in Jackson o @SerializedName("first-name") in Gson per mappare la chiave JSON a un nome di campo Java valido come firstName. Il convertitore converte automaticamente i nomi delle chiavi in campi Java in camelCase.
Posso generare classi Java da uno JSON Schema invece di un campione JSON?
Questo strumento genera classi da campioni di dati JSON. Per l'input da JSON Schema, usa il progetto jsonschema2pojo (disponibile come strumento CLI, plugin Maven e plugin Gradle). Legge un file JSON Schema e produce classi Java annotate con vincoli di validazione, valori predefiniti e documentazione dalle descrizioni dello schema.