JSON vers classe Java

Collez un exemple de JSON et le générateur émet une ou plusieurs classes Java avec les bons types de champs, getters, setters et annotations de bibliothèque JSON. Supporte Jackson (@JsonProperty), Gson (@SerializedName), et Lombok (@Data/@Builder) pour un code plus propre. Les objets imbriqués deviennent des classes internes ou des classes sœurs, selon la mise en page que vous choisissez.

Comment convertir JSON en Java

  1. 1

    Collez le JSON

    Un seul exemple suffit ; plusieurs exemples améliorent la détection de nullabilité.

  2. 2

    Choisissez la bibliothèque

    Jackson (le plus courant dans Spring), Gson (Android et certains projets hérités), ou POJO simple sans annotations.

  3. 3

    Choisissez des options supplémentaires

    Lombok pour les getters/setters générés automatiquement, le modèle de constructeur, equals/hashCode. Ou laissez-le simple.

  4. 4

    Choisissez le style imbriqué

    Classes sœurs dans le même fichier (les classes publiques Java 17+ doivent être dans des fichiers séparés) ou classes statiques imbriquées.

  5. 5

    Copiez le code

    Intégrez-le dans votre projet. Les noms de classe correspondent aux clés JSON ; le package est défini selon votre configuration.

Exemple de sortie : Jackson + Lombok

Entrée :

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

Sortie :

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

Mappage des types

JSON Type Java
chaîne String
entier (<= Integer.MAX) Integer / int
grand entier Long / BigInteger
décimal Double / BigDecimal
booléen Boolean / boolean
date ISO LocalDate (Jackson JSR-310)
date/heure ISO Instant / OffsetDateTime
null (avec un champ voisin non nul) Type enveloppant (ex. Integer)
tableau List<T>
objet Classe imbriquée

Choisir entre types enveloppants et primitifs

  • Primitif (int, long, boolean), non nul, efficace, pas d’auto-boxing.
  • Enveloppé (Integer, Long, Boolean), nullable, requis si le champ peut être absent ou nul dans JSON.

Le générateur par défaut utilise des types enveloppants pour tout ce qui est considéré comme nullable, sinon il utilise des primitifs.

Jackson vs Gson

Fonctionnalité Jackson Gson
Ubiquité dans Spring Oui, par défaut Non (configuration nécessaire)
Performance Plus rapide Plus lent
Support des dates JSR-310 Via module supplémentaire Via module supplémentaire
Polymorphisme @JsonTypeInfo RuntimeTypeAdapter
Tolérance aux virgules finales Non (par défaut) Oui

Erreurs courantes

  • Utiliser des types primitifs pour des champs nullable. int ne peut pas être nul ; Jackson lancera une exception si le JSON contient "age": null. Utilisez Integer.
  • Modules de date manquants. Jackson a besoin de jackson-datatype-jsr310 pour Instant/LocalDate. Sans cela, les dates retombent sur String ou des longs au format epoch.
  • Partage de types enveloppants entre des classes non liées. Si deux formes JSON ont toutes deux une Address imbriquée, le générateur crée deux classes Address. Renommez ou unifiez manuellement.
  • Oublier @JsonIgnoreProperties(ignoreUnknown = true). Jackson strict lance une exception sur les propriétés inconnues ; ajoutez cette annotation (ou configurez-la globalement) pour une désérialisation tolérante.

Questions fréquentes

Jackson dans la plupart des cas, c’est le défaut de Spring, plus rapide, et a un support polymorphe plus riche. Gson est plus léger et mieux connu dans Android, bien que les projets Android utilisent de plus en plus Moshi ou kotlinx.serialization.

Lombok réduit beaucoup de code répétitif (getters, setters, equals, hashCode, builder). Il est largement utilisé mais nécessite le processeur d’annotation Lombok dans votre build. Désactivez-le si votre projet évite Lombok pour des raisons d’hygiène des dépendances.

Les champs qui sont nuls dans tout exemple observé deviennent des types enveloppants (Integer au lieu de int), afin qu’ils puissent contenir null. Jackson désérialise alors "age": null sans erreur. Ajoutez @JsonInclude(Include.NON_NULL) pour ignorer les nuls lors de la sérialisation.

Oui, si vous sélectionnez “enregistrement”. Les enregistrements sont concis, immuables et fonctionnent avec Jackson 2.12+. Pour les projets Spring Boot 3, les enregistrements plus la génération sans Lombok sont le choix moderne.

Outils similaires

Outil disponible dans d’autres langues