JSON in classe Java

Incolla un campione JSON e il generatore emette una o più classi Java con i tipi di campo corretti, getter, setter e annotazioni della libreria JSON. Supporta Jackson (@JsonProperty), Gson (@SerializedName) e Lombok (@Data/@Builder) per un codice più pulito. Gli oggetti annidati diventano classi interne o sorelle, a seconda del layout scelto.

Come convertire JSON in Java

  1. 1

    Incolla il JSON

    Un singolo campione è sufficiente; più campioni migliorano il rilevamento della nullabilità.

  2. 2

    Scegli la libreria

    Jackson (il più comune in Spring), Gson (Android e alcuni progetti legacy), o POJO semplice senza annotazioni.

  3. 3

    Scegli extra

    Lombok per getter/setter generati automaticamente, pattern builder, equals/hashCode. Oppure lascialo semplice.

  4. 4

    Scegli lo stile annidato

    Classi sorelle nello stesso file (le classi pubbliche Java 17+ devono essere file separati) o classi statiche annidate.

  5. 5

    Copia il codice

    Inserisci nel tuo progetto. I nomi delle classi corrispondono alle chiavi JSON; il pacchetto è impostato su ciò che configuri.

Esempio di output: Jackson + Lombok

Input:

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

Output:

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

    @JsonProperty("age")
    private int age;

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

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

Mappatura dei tipi

JSON Tipo Java
stringa String
intero (≤ Integer.MAX) Integer / int
intero grande Long / BigInteger
decimale Double / BigDecimal
booleano Boolean / boolean
data ISO LocalDate (Jackson JSR-310)
data e ora ISO Instant / OffsetDateTime
null (con fratello non nullo) Tipo wrapper (es. Integer)
array List<T>
oggetto Classe annidata

Scegliere tra tipi boxed e primitivi

  • Primitivo (int, long, boolean), non nullo, efficiente, senza auto-boxing.
  • Boxed (Integer, Long, Boolean), nullo, necessario se il campo può essere assente o nullo in JSON.

Il generatore predefinisce boxed per tutto ciò che è considerato nullo, altrimenti primitivo.

Jackson vs Gson

Caratteristica Jackson Gson
Ubiquità in Spring Sì, predefinito No (richiede configurazione)
Prestazioni Più veloce Più lento
Supporto date JSR-310 Tramite modulo extra Tramite modulo extra
Polimorfismo @JsonTypeInfo RuntimeTypeAdapter
Tolleranza alla virgola finale No (di default)

Errori comuni

  • Utilizzare tipi primitivi per campi nullabili. int non può essere nullo; Jackson genererà un errore se il JSON ha "age": null. Usa Integer.
  • Moduli data mancanti. Jackson ha bisogno di jackson-datatype-jsr310 per Instant/LocalDate. Senza di esso, le date tornano a String o long epoch.
  • Condivisione di tipi wrapper tra classi non correlate. Se due forme JSON hanno entrambe un Address annidato, il generatore crea due classi Address. Rinomina o unisci manualmente.
  • Dimenticare @JsonIgnoreProperties(ignoreUnknown = true). Jackson rigoroso genera un errore su proprietà sconosciute; aggiungi questa annotazione (o configura globalmente) per una deserializzazione tollerante.

Domande frequenti

Jackson nella maggior parte dei casi, è il predefinito di Spring, più veloce e ha un supporto polimorfico più ricco. Gson è più leggero e meglio conosciuto in Android, anche se i progetti Android utilizzano sempre più Moshi o kotlinx.serialization.

Lombok riduce molto il boilerplate (getter, setter, equals, hashCode, builder). È ampiamente utilizzato ma richiede il processore di annotazioni Lombok nel tuo build. Disabilitalo se il tuo progetto evita Lombok per motivi di igiene delle dipendenze.

I campi che sono null in qualsiasi campione osservato diventano tipi boxed (Integer invece di int), quindi possono contenere null. Jackson quindi deserializza "age": null senza errore. Aggiungi @JsonInclude(Include.NON_NULL) per saltare i null durante la serializzazione.

Sì, se selezioni “record”. I record sono concisi, immutabili e funzionano con Jackson 2.12+. Per i progetti Spring Boot 3, record più generazione senza Lombok è la scelta moderna.

Strumenti correlati

Strumento disponibile in altre lingue