JSON till Java-klass

Klistra in ett JSON-exempel så genererar verktyget en eller flera Java-klasser med rätt fälttyper, getters, setters och annoteringar för JSON-biblioteket. Stöder Jackson (@JsonProperty), Gson (@SerializedName) och Lombok (@Data/@Builder) för renare kod. Nästlade objekt blir inre klasser eller syskonklasser, beroende på vilken layout du väljer.

Så konverterar du JSON till Java

  1. 1

    Klistra in JSON

    Ett enda exempel räcker; flera exempel förbättrar bedömningen av om ett fält kan vara null.

  2. 2

    Välj bibliotek

    Jackson (vanligast i Spring), Gson (för Android och vissa äldre projekt) eller en enkel POJO utan annoteringar.

  3. 3

    Välj tillägg

    Lombok för automatiskt genererade getters/setters, builder-mönstret samt equals/hashCode. Eller lämna det enkelt.

  4. 4

    Välj nästlingsstil

    Syskonklasser i samma fil (public-klasser i Java 17+ måste ligga i separata filer) eller nästlade statiska klasser.

  5. 5

    Kopiera koden

    Klistra in den i ditt projekt. Klassnamnen motsvarar JSON-nycklarna; paketet sätts till det du konfigurerar.

Exempel på utdata: Jackson + Lombok

Indata:

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

Utdata:

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

Typmappning

JSON Java-typ
sträng String
heltal (≤ Integer.MAX) Integer / int
stort heltal Long / BigInteger
decimaltal Double / BigDecimal
booleskt värde Boolean / boolean
ISO-datum LocalDate (Jackson JSR-310)
ISO-datum och tid Instant / OffsetDateTime
null (med ett syskonfält som inte är null) Wrapper-typ (t.ex. Integer)
array List<T>
objekt nästlad klass

Välja mellan wrapper-typ och primitiv typ

  • Primitiv (int, long, boolean), kan inte vara null, effektiv, ingen autoboxning.
  • Wrapper (Integer, Long, Boolean), kan vara null; krävs om fältet kan saknas eller vara null i JSON.

Som standard använder generatorn wrapper-typ för allt som anses kunna vara null, och primitiv typ i övrigt.

Jackson kontra Gson

Funktion Jackson Gson
Utbredning i Spring Ja, standard Nej (kräver konfiguration)
Prestanda Snabbare Långsammare
Stöd för JSR-310-datum Via extra modul Via extra modul
Polymorfism @JsonTypeInfo RuntimeTypeAdapter
Tolerans för avslutande kommatecken Nej (som standard) Ja

Vanliga misstag

  • Använda primitiva typer för fält som kan vara null. int kan inte vara null; Jackson kastar ett fel om JSON innehåller "age": null. Använd Integer.
  • Saknade datummoduler. Jackson behöver jackson-datatype-jsr310 för Instant/LocalDate. Utan den faller datum tillbaka till String eller epoch-long-värden.
  • Dela wrapper-typer mellan orelaterade klasser. Om två JSON-former båda har en nästlad Address skapar generatorn två Address-klasser. Byt namn eller slå ihop dem manuellt.
  • Glömma @JsonIgnoreProperties(ignoreUnknown = true). Strikt Jackson kastar fel vid okända egenskaper; lägg till denna annotering (eller konfigurera den globalt) för tolerant deserialisering.

Vanliga frågor

Jackson i de flesta fall, det är standard i Spring, snabbare och har rikare stöd för polymorfism. Gson är lättare och mer känt i Android, även om Android-projekt allt oftare använder Moshi eller kotlinx.serialization.

Lombok skär bort mycket standardkod (getters, setters, equals, hashCode, builder). Det används brett men kräver Lomboks annoteringsprocessor i bygget. Inaktivera det om ditt projekt undviker Lombok av beroendehygieniska skäl.

Fält som är null i något av de observerade exemplen blir wrapper-typer (Integer i stället för int) så att de kan innehålla null. Jackson deserialiserar då "age": null utan fel. Lägg till @JsonInclude(Include.NON_NULL) för att hoppa över null vid serialisering.

Ja, om du väljer “record”. Record-klasser är koncisa, oföränderliga och fungerar med Jackson 2.12+. För Spring Boot 3-projekt är kombinationen av record och Lombok-fri generering det moderna valet.

Relaterade verktyg

Verktyget finns på andra språk