JSON naar Java-klasse

Plak een JSON-voorbeeld en de generator geeft een of meer Java-klassen terug met de juiste veldtypen, getters, setters en JSON-bibliotheekannotaties. Ondersteunt Jackson (@JsonProperty), Gson (@SerializedName) en Lombok (@Data/@Builder) voor schonere code. Geneste objecten worden interne of zusterklassen, afhankelijk van de indeling die je kiest.

Hoe je JSON naar Java converteert

  1. 1

    Plak de JSON

    Eén voorbeeld is genoeg; meerdere voorbeelden verbeteren de detectie of een veld null mag zijn.

  2. 2

    Kies de bibliotheek

    Jackson (het meest gebruikelijk in Spring), Gson (voor Android en enkele legacy-projecten) of een eenvoudige POJO zonder annotaties.

  3. 3

    Kies extra opties

    Lombok voor automatisch gegenereerde getters/setters, het builder-patroon en equals/hashCode. Of laat het eenvoudig.

  4. 4

    Kies de nestingstijl

    Zusterklassen in hetzelfde bestand (public-klassen in Java 17+ moeten in aparte bestanden staan) of geneste statische klassen.

  5. 5

    Kopieer de code

    Plak hem in je project. Klassennamen komen overeen met de JSON-sleutels; het package wordt ingesteld op wat je configureert.

Voorbeelduitvoer: Jackson + Lombok

Invoer:

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

Uitvoer:

@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;
}

Typetoewijzing

JSON Java-type
tekenreeks String
geheel getal (≤ Integer.MAX) Integer / int
groot geheel getal Long / BigInteger
decimaal Double / BigDecimal
booleaans Boolean / boolean
ISO-datum LocalDate (Jackson JSR-310)
ISO-datum en -tijd Instant / OffsetDateTime
null (met een niet-null zusterveld) Wrapper-type (bijv. Integer)
array List<T>
object geneste klasse

Kiezen tussen wrapper- en primitief type

  • Primitief (int, long, boolean), niet-nullbaar, efficiënt, zonder auto-boxing.
  • Wrapper (Integer, Long, Boolean), nullbaar, vereist als het veld in JSON kan ontbreken of null kan zijn.

De generator gebruikt standaard een wrapper-type voor alles wat als nullbaar wordt beschouwd, en anders een primitief type.

Jackson versus Gson

Functie Jackson Gson
Alomtegenwoordigheid in Spring Ja, standaard Nee (configuratie vereist)
Prestaties Sneller Langzamer
JSR-310-datumondersteuning Via extra module Via extra module
Polymorfisme @JsonTypeInfo RuntimeTypeAdapter
Tolerantie voor afsluitende komma Nee (standaard) Ja

Veelvoorkomende fouten

  • Primitieve typen gebruiken voor nullbare velden. int kan niet null zijn; Jackson gooit een fout als de JSON "age": null bevat. Gebruik Integer.
  • Ontbrekende datummodules. Jackson heeft jackson-datatype-jsr310 nodig voor Instant/LocalDate. Zonder deze module vallen datums terug op String of epoch-longs.
  • Wrapper-typen delen tussen niet-gerelateerde klassen. Als twee JSON-vormen beide een geneste Address hebben, maakt de generator twee Address-klassen aan. Hernoem of voeg ze handmatig samen.
  • @JsonIgnoreProperties(ignoreUnknown = true) vergeten. Strikte Jackson gooit een fout bij onbekende eigenschappen; voeg deze annotatie toe (of configureer die globaal) voor tolerante deserialisatie.

Veelgestelde vragen

In de meeste gevallen Jackson: het is de standaard in Spring, sneller en met rijkere ondersteuning voor polymorfisme. Gson is lichter en beter bekend binnen Android, hoewel Android-projecten steeds vaker Moshi of kotlinx.serialization gebruiken.

Lombok schrapt veel boilerplate (getters, setters, equals, hashCode, builder). Het wordt breed gebruikt, maar vereist de Lombok-annotatieprocessor in je build. Schakel het uit als je project Lombok vermijdt om redenen van dependency-hygiëne.

Velden die in een van de waargenomen voorbeelden null zijn, worden wrapper-typen (Integer in plaats van int), zodat ze null kunnen bevatten. Jackson deserialiseert "age": null dan zonder fout. Voeg @JsonInclude(Include.NON_NULL) toe om null-waarden bij het serialiseren over te slaan.

Ja, als je “record” kiest. Records zijn beknopt, onveranderlijk en werken met Jackson 2.12+. Voor Spring Boot 3-projecten is de combinatie van records en generatie zonder Lombok de moderne keuze.

Gerelateerde tools

Tool beschikbaar in andere talen