JSON vers Java

Outil en ligne gratuit JSON vers Java : convertissez vos données JSON en classes POJO Java annotées en un seul clic. Prise en charge de 4 bibliothèques d'annotations de sérialisation (Lombok / Jackson / Gson / Fastjson), mode Lombok @Data pour un code minimal, interface Serializable et méthodes toString / equals / hashCode optionnelles, 4 stratégies de nommage des champs, classes imbriquées générées automatiquement.

Recommandations connexes

À propos de JSON vers Java POJO et classes d'entités Java

Un outil JSON vers Java (JSON to Java Converter) convertit automatiquement une structure de données JSON en code de classes POJO Java standard. Il libère le développeur de la tâche répétitive consistant à écrire package / import / champs private / getter / setter, et se révèle particulièrement utile pour transformer rapidement les exemples JSON d'une documentation d'API en classes d'entités Java directement compilables.

POJO (Plain Old Java Object) désigne dans la communauté Java un « objet Java ordinaire », défini par : ① Des champs privés (private) ; ② Des accesseurs getter / setter publics ; ③ Aucune dépendance d'héritage de framework (pas d'héritage de HttpServlet / EJB, etc.). Le POJO est le support de données central des principaux frameworks (Spring Boot, Hibernate, Jackson). L'essence de JSON vers Java est de statifier une structure JSON dynamique en un type POJO.

L'outil prend en charge les 4 grandes bibliothèques d'annotations de sérialisation : ① Gson (Google, annotation @SerializedName) ; ② Jackson (par défaut dans Spring Boot, annotations @JsonProperty + @JsonFormat) ; ③ Fastjson (Alibaba, annotation @JSONField) ; ④ Lombok (ensemble @Data / @Builder / @NoArgsConstructor / @AllArgsConstructor). Vous choisissez selon le framework utilisé dans votre projet, sans retraitement dans l'IDE.

Le mode Lombok @Data est la fonctionnalité avancée de l'outil : une fois activé, la classe Java générée ne compte que 5 lignes (@Data + champs) ; tous les getter / setter / equals / hashCode / toString sont générés à la compilation par Lombok. Comparé aux templates d'IDE ou aux POJO écrits à la main, la lisibilité du code source augmente de plus de 80 % et le coût de maintenance baisse de plus de 60 %. Attention : le projet doit inclure la dépendance Lombok (coordonnées Maven / Gradle).

Autre différenciation : « Téléchargement ZIP multi-fichiers + arborescence automatique par package ». Les outils en ligne classiques se limitent au copier-coller d'une seule classe, alors qu'ici un ZIP est généré en un clic, avec arborescence organisée selon le package (par ex. com/geekformat/pojo/). Après extraction, import direct dans l'IDE via « Import Project », sans avoir à créer manuellement l'arborescence de packages.

Cas d'utilisation

  • Développement Android : convertir le JSON renvoyé par l'API backend en classes d'entités Java (POJO), avec annotations Gson / Moshi / Fastjson / Jackson utilisables directement à la désérialisation
  • Backend Spring Boot : transformer rapidement les exemples JSON de la documentation d'API en classes DTO / VO / Entity, en combinaison avec Lombok @Data pour réduire le volume de code
  • Intégration d'API tierces : convertir la réponse JSON d'un partenaire en modèle Java correspondant et choisir la bibliothèque de sérialisation adaptée (Jackson / Fastjson / Gson) pour une intégration transparente
  • Architecture microservices : unifier les modèles de données de requête/réponse des interfaces RPC, pour partager la même définition de classes Java entre plusieurs équipes
  • Enseignement et formation : transformer un exemple JSON en POJO pour illustrer la modélisation orientée objet en cours de structures de données ou de Java
  • Documentation d'API : intégrer des exemples d'entités Java dans la doc Swagger / OpenAPI / Knife4j
  • Préparation de tests unitaires : convertir un fixture JSON en classes Java puis désérialiser avec Jackson pour des tests pilotés par les données
  • Scripts de migration de données : convertir un fichier de configuration JSON en classes Java pour un accès fortement typé à la logique métier
  • Mock front / back : le backend convertit d'abord le modèle JSON en Java, le front reçoit en parallèle l'interface TypeScript / POJO Java correspondante
  • Revue de code : transformer directement la réponse JSON d'une API en POJO lisible, pour faciliter la discussion sur le nommage des champs en code review
  • Refactoring d'anciens projets : remplacer l'accès dynamique via JSONObject par un accès fortement typé basé sur POJO
  • Modélisation multi-rôles Entity / DTO : générer UserEntity (couche DB) + UserDTO (couche API) + UserVO (couche vue) à partir du même JSON, avec annotations différentes possibles
  • Intégration d'API backend en snake_case : le backend renvoie des champs en snake_case, le front Java active « Convertir en camelCase » + annotations Gson/Jackson pour une intégration transparente
  • DTO destinés à la persistance : cochez « Implémenter Serializable » pour les utiliser directement dans un cache Redis ou un store de session distribuée

Comment utiliser

  1. Collez un objet JSON (recommandé) ou un tableau JSON dans l'éditeur de gauche, ou cliquez sur « Sample » pour charger un exemple en chinois (avec address / company / tags imbriqués)
  2. Cliquez sur le bouton « Settings » de la barre d'outils (ou sur le bouton affichant le nom de classe). Dans la boîte de dialogue : ① Définissez le nom de la classe racine (par ex. User) et le package (par ex. com.example.entity) ; ② Choisissez la bibliothèque d'annotations de sérialisation (Gson / Jackson / Fastjson / Lombok / aucune) ; ③ Choisissez le style de code (toString / equals / hashCode / constructeurs / Serializable) ; ④ Choisissez la stratégie de nommage des champs (Conserver tel quel / camelCase / Tout en minuscules / UPPER_SNAKE)
  3. L'outil convertit automatiquement sous 400 ms. À droite s'affichent toutes les classes Java générées (une carte par classe, avec un badge en temps réel indiquant la bibliothèque d'annotations et l'activation de Lombok) ; en cas de JSON invalide, un bouton « Réparer le JSON » apparaît
  4. Vérifiez que les noms de classes, de champs et les annotations correspondent à vos attentes. Si besoin, modifiez les clés du JSON source ou rouvrez Paramètres pour ajuster les options
  5. Une fois satisfait, cliquez sur le bouton « Copier » d'une classe pour la coller dans l'IDE, ou cliquez sur « Download ZIP » dans la barre d'outils pour télécharger toutes les classes en une fois (arborescence organisée selon le package)

Fonctionnalités

  • 4 bibliothèques d'annotations de sérialisation : Gson (@SerializedName) / Jackson (@JsonProperty + @JsonFormat pour les dates) / Fastjson (@JSONField) / Lombok (@Data), commutables d'un clic
  • Mode Lombok @Data : génère automatiquement la combinaison @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor, réduisant la classe Java d'environ 50 lignes à 5 lignes
  • 4 stratégies de nommage des champs : Conserver tel quel / snake_case vers camelCase (user_name → userName) / Tout en minuscules / constantes UPPER_SNAKE
  • Style de code librement combinable : génération optionnelle de toString / equals / hashCode / constructeur sans argument / constructeur avec tous les arguments / implémentation de l'interface Serializable
  • Inférence intelligente des types : reconnaissance automatique de String / Integer / Double / Boolean / List<Object> / objets imbriqués, sans saisie manuelle des types de champs
  • Classes imbriquées générées automatiquement : les objets imbriqués sont convertis en classes Java distinctes (nommées d'après la première lettre en majuscule de la clé), les objets dans les tableaux sont nommés selon la règle « suppression du s du pluriel »
  • Génériques de tableau développés automatiquement : les tableaux JSON sont convertis en types génériques Java List<T>, le type des éléments étant déduit du premier élément
  • Modèle POJO complet : génération d'un fichier .java complet incluant la déclaration package + un en-tête (Copyright + horodatage automatique) + import + champs privés + getter/setter
  • Téléchargement ZIP multi-fichiers : toutes les classes générées sont organisées selon le chemin du package (par ex. com/example/entity/User.java) et packagées en ZIP en un clic, avec arborescence
  • Nom de package et nom de classe personnalisables : package libre (par ex. com.example.entity) et nom de classe racine (par ex. User) ; tous les noms de classes sont générés à partir du nom racine
  • Contrôle de l'indentation : commutateur 2 / 4 espaces disponible à droite, pour s'aligner sur la convention de votre équipe
  • Copie d'une classe unique : chaque classe Java générée dispose d'un bouton « Copier » dédié, pour collage direct dans l'IDE
  • Conversion automatique + réparation d'erreurs : conversion automatique avec anti-rebond de 400 ms ; en cas de JSON invalide, un bouton « Réparer le JSON » apparaît et corrige les erreurs courantes (virgules superflues, apostrophes, etc.)
  • Exemples + import de fichier : exemples en chinois intégrés (avec address / company / tags / scores imbriqués) et prise en charge du glisser-déposer ou du clic pour charger un fichier .json / .txt
  • Historique local : persistance des 200 dernières entrées dans le localStorage, pour restauration rapide après rafraîchissement ou fermeture accidentelle
  • Exécution locale dans le navigateur : tout le parsing JSON, la génération Java et le packaging ZIP s'exécutent en JavaScript dans votre navigateur, sans aucun envoi de données vers un serveur

Exemples de code

Java : désérialiser un POJO généré par cet outil avec Jackson

java

Usage le plus courant dans un projet Spring Boot : désérialiser une réponse API vers un POJO généré par cet outil via Jackson.

import com.fasterxml.jackson.databind.ObjectMapper;
import com.geekformat.pojo.User;
import com.geekformat.pojo.Address;

public class ApiClient {
    private final ObjectMapper objectMapper = new ObjectMapper();

    public User getUser(int userId) throws Exception {
        // 1) Appel API pour récupérer la chaîne JSON
        String json = httpClient.get("https://api.example.com/users/" + userId);

        // 2) Désérialisation directe vers le POJO généré
        User user = objectMapper.readValue(json, User.class);

        // 3) Accès fortement typé aux champs (vérification à la compilation)
        System.out.println("User: " + user.getName());
        if (user.getAddress() != null) {
            System.out.println("City: " + user.getAddress().getCity());
        }
        return user;
    }

    public static void main(String[] args) throws Exception {
        ApiClient client = new ApiClient();
        User user = client.getUser(123);
        System.out.println(user.getName());
    }
}

Java : utilisation de Lombok @Data + @Builder

java

Code généré en mode Lombok, avec son mode d'emploi : construction par appels chaînés de builder, Lombok générant le POJO complet à la compilation.

import com.geekformat.pojo.User;

public class UserService {

    public User createUser() {
        // Mode Lombok @Builder : appels chaînés, plus lisibles que les setters
        User user = User.builder()
            .id(1)
            .userName("Alice")
            .email("alice@example.com")
            .isActive(true)
            .createdAt("2026-07-08T10:00:00.000Z")
            .build();

        System.out.println(user);
        // toString() généré automatiquement par Lombok @Data :
        // User(id=1, userName=Alice, email=alice@example.com, ...)

        return user;
    }

    public boolean isValid(User user) {
        // equals() et hashCode() générés automatiquement par Lombok @Data
        return user != null && user.getId() != null;
    }
}

/*
 * Dépendance pom.xml correspondante :
 * <dependency>
 *     <groupId>org.projectlombok</groupId>
 *     <artifactId>lombok</artifactId>
 *     <version>1.18.30</version>
 *     <scope>provided</scope>
 * </dependency>
 */

Ligne de commande : extraire le ZIP téléchargé par l'outil pour l'importer dans l'IDE

bash

L'outil télécharge un ZIP (organisé selon le chemin de package). Après extraction, il s'importe directement dans l'IDE.

# 1) Après téléchargement du ZIP (nom de fichier du type User.zip)
unzip User.zip -d src/main/java/

# 2) Vérifier l'arborescence
tree src/main/java/
# src/main/java/
# └── com/
#     └── example/
#         └── entity/
#             ├── User.java
#             ├── Address.java
#             └── Company.java

# 3) Dans IntelliJ IDEA : clic droit sur le répertoire com → "Mark Directory as" → "Sources Root"
#    Sous Eclipse : File → Import → Existing Projects into Workspace

# 4) Utilisation directe dans un projet Spring Boot
#    UserController.java
#    @PostMapping("/users")
#    public ResponseEntity<User> createUser(@RequestBody User user) {
#        userService.save(user);
#        return ResponseEntity.ok(user);
#    }

# 5) Vérification de la compilation
mvn compile
# [INFO] BUILD SUCCESS

# 6) (Optionnel) Avec Lombok, n'oubliez pas la dépendance dans pom.xml
#    <dependency>
#        <groupId>org.projectlombok</groupId>
#        <artifactId>lombok</artifactId>
#    </dependency>

FAQ

Comment convertir du JSON en classes POJO Java ?

Collez votre JSON dans la zone de saisie : l'outil le convertit automatiquement sous 400 ms ; vous pouvez aussi cliquer sur le bouton « Convert » dans la barre d'outils. Toutes les classes Java générées s'affichent à droite, chacune avec son bouton « Copier » ; cliquez sur « Download ZIP » pour empaqueter et télécharger toutes les classes en une fois.

Quelles structures JSON sont prises en charge ?

Deux structures sont prises en charge : ① Objet JSON (servant de classe racine, avec génération automatique de public class RootBean { ... }) ; ② Tableau JSON (le premier objet du tableau sert de modèle pour la classe racine). Tous les objets imbriqués sont traités récursivement en classes distinctes ; les objets présents dans les tableaux sont traités récursivement comme classes correspondant au type d'élément de la List.

Que contient une classe Java générée ?

Chaque fichier .java généré contient : ① Un en-tête (Copyright + horodatage automatique) ; ② La déclaration package ; ③ Les instructions import (List / Objects / Serializable / Gson / Jackson / Fastjson / Lombok, etc., importés selon les besoins) ; ④ La déclaration public class (avec implements Serializable optionnel) ; ⑤ Les champs privés (private, avec annotations selon les besoins) ; ⑥ Les méthodes getter / setter standard (ou uniquement les annotations Lombok) ; ⑦ Les méthodes toString / equals / hashCode optionnelles. Le tout est directement compilable avec javac.

Les annotations Gson / Jackson / Fastjson / Lombok sont-elles prises en charge ?

Oui. Dans le groupe « Bibliothèque d'annotations de sérialisation » de la fenêtre Paramètres, choisissez : ① Gson (ajoute @SerializedName("clé d'origine") sur chaque champ) ; ② Jackson (ajoute @JsonProperty sur chaque champ, plus @JsonFormat sur les champs de date) ; ③ Fastjson (ajoute @JSONField(name="clé d'origine") sur chaque champ) ; ④ Lombok (ajoute @Data sur la classe, avec @Builder / @NoArgsConstructor / @AllArgsConstructor optionnels) ; ⑤ Sans annotations (par défaut, POJO pur). Les packages correspondants sont importés automatiquement.

À quoi ressemble le code généré en mode Lombok @Data ?

Avec Lombok activé, la classe Java générée est considérablement réduite. Par exemple, une class User avec Lombok ne compte que 5 lignes : @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + déclaration des champs. Tous les getter / setter / equals / hashCode / toString sont générés automatiquement à la compilation par Lombok, ce qui améliore nettement la lisibilité du code source. Attention : le projet doit inclure la dépendance Lombok (coordonnées lombok dans pom.xml / build.gradle) et l'IDE doit avoir le plugin Lombok installé.

Comment convertir des noms de champs snake_case en camelCase ?

Dans le groupe « Stratégie de nommage des champs » de la fenêtre Paramètres, sélectionnez le mode « Convertir en camelCase » : l'outil convertit automatiquement les noms de champs JSON de snake_case vers la convention Java recommandée. Par exemple user_name → userName, created_at → createdAt, is_active → isActive. Si vous avez en plus choisi les annotations Gson/Jackson/Fastjson, la valeur d'annotation conserve la chaîne snake_case d'origine, ce qui garantit le mapping correct à la désérialisation.

Comment les objets JSON imbriqués sont-ils traités ?

L'outil crée automatiquement des classes Java distinctes pour chaque objet imbriqué. Règle de nommage : la clé de l'objet imbriqué, avec la première lettre en majuscule, sert de nom de classe (par ex. address → Address) ; pour les objets dans les tableaux, on retire le « s » final de la clé puis on met la première lettre en majuscule (par ex. users → User). Chaque classe imbriquée contient les champs, getter/setter et annotations complets.

Les champs de tableau sont-ils convertis automatiquement en List ?

Oui. Les champs de tableau JSON sont automatiquement convertis en type générique Java List<T>, le type des éléments étant déduit du premier élément du tableau. Par exemple ["a","b","c"] → List<String> ; [{...},{...}] → List<User> (User étant une nouvelle classe nommée d'après la clé) ; un tableau vide [] donne par défaut List<Object>.

Comment modifier le nom de la classe racine et le nom du package ?

En haut à droite de la barre d'outils se trouve un bouton Settings (ou un bouton affichant le nom de classe). En cliquant dessus, une boîte de dialogue permet de définir : ① Le nom de la classe racine (par défaut JsonRootBean) ; ② Le nom du package (par défaut com.geekformat.pojo). Après modification, tous les noms de classes générés sont mis à jour, et l'arborescence du ZIP est réorganisée selon le nouveau chemin de package.

Le téléchargement est-il un fichier .java unique ou un ZIP ?

Le téléchargement est un ZIP (JsonRootBean.zip) contenant toutes les classes Java générées, organisées selon le chemin du package. Par exemple, avec le package com.geekformat.pojo, la structure est : com/geekformat/pojo/JsonRootBean.java, com/geekformat/pojo/Address.java, etc. Vous pouvez l'extraire avec unzip ou l'importer directement dans l'IDE.

Puis-je copier une seule classe directement dans l'IDE ?

Oui. Chaque classe Java générée s'affiche sous forme de carte indépendante, avec un bouton « Copier » en haut à droite. Au clic, le code complet de la classe (package + import + définition de classe + champs + annotations + getter/setter) est copié dans le presse-papiers, prêt à être collé dans IntelliJ IDEA, Eclipse, VS Code, etc.

Comment générer un Builder Lombok avec @Builder ?

Dans le groupe « Style de code » de la fenêtre Paramètres : ① Cochez « Utiliser Lombok @Data pour réduire le code » (active automatiquement la bibliothèque Lombok) ; ② Cochez « Générer le pattern Builder avec @Builder ». La classe générée inclut automatiquement @Builder. Exemple d'utilisation : User user = User.builder().id(1).name("Alice").build();

Comment faire en sorte que la classe générée implémente l'interface Serializable ?

Dans le groupe « Style de code » de la fenêtre Paramètres, cochez « Implémenter l'interface Serializable ». L'outil ajoute alors automatiquement : ① implements Serializable dans la déclaration de classe ; ② import java.io.Serializable. Idéal pour les POJO destinés à être sérialisés vers un fichier, transmis par le réseau ou stockés dans un cache Redis.

Quelle est la différence entre JSON vers Java et JSON vers TypeScript ?

Les deux convertissent du JSON en définitions de types pour le langage cible, mais avec un angle différent : ① Java produit des classes POJO complètes (avec package + import + champs private + getter/setter), directement compilables et exécutables ; ② TypeScript produit une déclaration interface ou type, qui ne décrit que la structure de données, sans implémentation. Le choix dépend du langage de votre projet.

Le code généré convient-il à un projet Spring Boot ?

Oui. Les classes POJO générées respectent la spécification Java Bean standard (champs privés + getter/setter) et sont compatibles avec la désérialisation Jackson de Spring Boot, le binding de formulaires MVC et la définition d'entités JPA (manuelle). Pour profiter de Lombok (@Data / @Builder), il suffit de l'activer dans la fenêtre Paramètres, sans refactoring supplémentaire dans l'IDE.

Que faire si le JSON est mal formé ?

L'outil détecte automatiquement la validité du JSON. En cas d'erreur, un message rouge s'affiche à droite avec un bouton « Réparer le JSON ». Au clic, les erreurs courantes sont corrigées automatiquement : ① Virgule superflue en fin de tableau/objet ; ② Apostrophes remplacées par des guillemets doubles ; ③ Clés sans guillemets automatiquement quotées ; ④ Commentaires supprimés. Une fois réparé, la conversion en classes Java peut être lancée.

Les données sont-elles envoyées à un serveur ? Et la confidentialité ?

Exécution 100 % locale dans le navigateur. Tout le parsing JSON, la génération Java et le packaging ZIP s'exécutent en JavaScript (JSZip) dans votre navigateur. Ni les données JSON saisies, ni le code Java généré ne sont envoyés à un serveur, ni enregistrés ou mis en cache dans le cloud. Vous pouvez utiliser en toute confiance des JSON sensibles (champs d'API internes, structures métier non publiées, réponses d'API confidentielles) : toutes les données disparaissent à la fermeture de la page.

L'outil ralentit-il avec un JSON de 10 000 lignes ?

Il n'y a pas de limite explicite de lignes, mais le parsing et le rendu de très gros JSON ralentissent le navigateur. Recommandations : ① Découpez le JSON et convertissez par lots ; ② Ne traitez qu'un seul niveau d'imbrication à la fois ; ③ Pour générer plus de 100 classes d'un coup, privilégiez les plugins de génération de code de votre IDE (MyBatis Generator, MapStruct) ou des bibliothèques dédiées (JavaPoet, JOOQ).

Dépannage

Message « Veuillez saisir des données JSON » ou erreur similaire

La zone de saisie de gauche est vide ou ne contient que des espaces. Assurez-vous d'avoir collé un JSON valide, ou cliquez sur « Sample » pour charger un exemple en chinois, ou cliquez sur « Upload » pour choisir un fichier .json / .txt.

Message « Unexpected token ... in JSON at position N »

Le JSON est mal formé. Causes courantes : ① Virgule superflue en fin (par ex. {"a":1,}) ; ② Utilisation d'apostrophes au lieu de guillemets doubles ; ③ Syntaxe d'objet JS (par ex. {key: value}) au lieu de JSON (par ex. {"key": "value"}). Cliquez sur « Réparer le JSON » pour corriger automatiquement une partie des erreurs.

Les annotations générées ne correspondent pas au framework du projet

Changez de bibliothèque d'annotations dans le groupe « Bibliothèque d'annotations de sérialisation » de la fenêtre Paramètres : ① Jackson pour Spring Boot ; ② Gson pour Android ; ③ Fastjson pour le back Java Alibaba ; ④ Lombok pour réduire le code ; ⑤ « Sans annotations » si vous ne voulez aucune bibliothèque. Les annotations et imports sont régénérés automatiquement.

Erreur Lombok à la compilation « Symbole introuvable »

Le projet n'inclut pas la dépendance Lombok. Ajoutez dans pom.xml : `<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope></dependency>` ; l'IDE doit aussi avoir le plugin Lombok installé (IntelliJ IDEA → Plugins → rechercher Lombok → Install).

Je veux un code réduit sans Lombok

Dans la fenêtre Paramètres, ne cochez pas Lombok @Data, mais restez concis en mode traditionnel : ① Cochez « Générer constructeur sans argument » + « Générer constructeur avec tous les arguments » + « Générer toString / equals / hashCode » ; ② L'équipe peut utiliser les Postfix Completion de l'IDE (templates .var / .field d'IntelliJ) pour générer en masse. Ou utilisez la génération POJO intégrée de l'IDE (Alt+Insert → Constructor / Getter / Setter).

Après conversion snake_case → camelCase, l'IDE signale « Symbole introuvable »

« Convertir en camelCase » ne modifie que le nom du champ, mais le getter/setter généré par Lombok @Data suit le nouveau nom (par ex. user_name → userName → getUserName / setUserName), donc le code est correct. Si l'erreur persiste, vérifiez : ① L'IDE a-t-il bien recompilé ; ② Le plugin Lombok est-il installé et activé ; ③ Nettoyez le cache de l'IDE (File → Invalidate Caches).

Le nom de classe de l'objet imbriqué ne correspond pas à mes attentes (par ex. categories renommé en Categori)

L'outil applique la règle « suppression du s final + première lettre en majuscule » aux objets des tableaux, ce qui est peu adapté aux pluriels irréguliers comme categories. Recommandations : ① Renommez la clé JSON au singulier (par ex. categories → category) ; ② Ou renommez la classe dans l'IDE avec Rename (avec mise à jour de toutes les références).

L'arborescence du ZIP téléchargé est incorrecte

Le ZIP est organisé selon le package (par défaut com/geekformat/pojo/). Si l'emplacement après extraction ne convient pas : ① Modifiez le package (par ex. com.example) et retéléchargez ; ② Utilisez unzip -d src/main/java pour préciser le répertoire cible ; ③ Ou ouvrez directement le dossier extrait dans l'IDE (File → Open).

Échec de désérialisation des champs de date en mode Jackson

L'outil détecte automatiquement les dates ISO 8601 comme "2026-07-08T10:00:00.000Z" et ajoute @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"). Si votre format est différent (par ex. "2026-07-08"), vous pouvez : ① Utiliser le format ISO 8601 dans le JSON source ; ② Ou ajuster manuellement le paramètre pattern de @JsonFormat après génération.

Caractères chinois des noms de fichiers du ZIP illisibles sous Windows

Les noms de fichiers ZIP et de classes Java sont en anglais (ASCII) par défaut, donc pas de problème d'encodage. Si le JSON source contient des clés en chinois (générant des noms de champs en chinois), l'IDE peut afficher un avertissement de convention, mais pas un problème d'encodage. Recommandation : renommez les clés JSON en anglais (camelCase) pour respecter les conventions Java.

Ralentissement de la page lors de la génération de 100+ classes imbriquées

Il n'y a pas de limite explicite, mais le rendu DOM du navigateur se dégrade fortement avec un très grand nombre de classes. Recommandations : ① Découpez le JSON en modules indépendants à convertir séparément ; ② Utilisez les outils intégrés de votre IDE (plugin IntelliJ JSON to POJO) ; ③ Évitez plus de 6 niveaux d'imbrication, sinon refactorez la structure JSON.

Un tableau numérique est généré en List<Object>

C'est généralement le cas d'un tableau vide [] qui donne par défaut List<Object>. Ajoutez au moins un élément d'exemple dans le JSON source (par ex. [1,2,3]) : l'outil déduira le type à partir du premier élément ; ou remplacez manuellement List<Object> par List<Integer> après génération.

Un champ de valeur null est généré en type Object

Les valeurs null JSON sont déduites par défaut en type Object (car le type réel est indéterminable). C'est un choix sûr qui évite les faux positifs. Si vous connaissez le type, donnez une valeur d'exemple dans le JSON source (par ex. "field": "" pour en déduire String), puis supprimez l'exemple après génération.

L'arborescence du ZIP ne se met pas à jour après modification du package

Après modification du package, recliquez sur « Convert » (ou patientez 400 ms pour le déclenchement automatique). À la fermeture de la fenêtre Paramètres, la prochaine modification de l'entrée régénère tous les fichiers avec le nouveau package.

Comment nettoyer l'en-tête généré automatiquement (par ex. Copyright) ?

L'outil génère par défaut un en-tête avec Copyright + horodatage automatique. Si vous ne le souhaitez pas, vous pouvez le supprimer par Find & Replace global dans l'IDE, ou modifier la fonction generateFileHeader du code source de l'outil (nécessite un redéploiement).

Je veux faire une conversion « backend snake_case + front Java »

Scénario typique : le backend (par ex. service Python / Go) renvoie des champs en snake_case, le système Java en front a besoin de champs en camelCase. Étapes : ① Dans la fenêtre Paramètres, choisissez Jackson ou Gson ; ② Sélectionnez la stratégie « Convertir en camelCase » ; ③ L'outil génère automatiquement : nom de champ = userName (camelCase), valeur d'annotation = "user_name" (clé d'origine conservée) ; à la désérialisation, le mapping se fait via l'annotation, et l'accès suit la convention Java.

Glossaire

POJO
Plain Old Java Object, objet Java ordinaire. Défini par : champs privés + getter/setter publics + aucune dépendance de framework. L'outil génère des POJO standard.
JavaBean
Ancienne appellation d'un POJO dans la communauté Java : constructeur public sans argument + champs privés + getter/setter publics. Les classes générées par l'outil respectent la spécification JavaBean.
DTO (Data Transfer Object)
Objet de transfert de données, utilisé pour transporter des données entre processus (API / RPC). Les POJO générés par l'outil peuvent servir de DTO.
VO (Value Object)
Objet valeur, généralement utilisé au niveau de la vue (données renvoyées par le Controller au front). Les POJO générés par l'outil conviennent aussi.
Entity
Objet entité, correspondant à une ligne d'une table en base. Les POJO générés peuvent servir de classe de base @Entity JPA / Hibernate (après ajout manuel des annotations).
@SerializedName
Annotation de mapping de champ de la bibliothèque Gson. En mode Gson, l'outil ajoute automatiquement @SerializedName("clé d'origine") sur chaque champ pour garantir le mapping à la désérialisation.
@JsonProperty
Annotation de mapping de champ de Jackson. En mode Jackson, l'outil ajoute automatiquement @JsonProperty("clé d'origine") sur chaque champ ; les champs de date reçoivent en plus @JsonFormat pour définir le format de sérialisation.
@JSONField
Annotation de mapping de champ de la bibliothèque Fastjson d'Alibaba. En mode Fastjson, l'outil ajoute automatiquement @JSONField(name = "clé d'origine") sur chaque champ.
Lombok @Data
Annotation composite de Lombok, équivalente à @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor. En mode Lombok, l'outil ajoute cette annotation d'un clic sur la classe.
Lombok @Builder
Annotation de pattern Builder de Lombok. Lorsqu'elle est cochée, l'outil l'ajoute automatiquement et génère une méthode builder() chaînable.
Serializable
Interface marqueur de Java. Une fois implémentée, l'objet peut être sérialisé (écrit dans un fichier, transmis par le réseau, stocké dans un cache Redis). En cochant « Implémenter Serializable », l'outil ajoute implements Serializable et importe java.io.Serializable.
Classe imbriquée (Nested Class)
Classe Java distincte générée par l'outil pour un objet JSON imbriqué. Règle de nommage : la clé de l'objet imbriqué avec la première lettre en majuscule (par ex. address → Address).
Générique List
Interface du framework de collections Java. L'outil convertit automatiquement un tableau JSON en List<T>, T étant déduit du premier élément (par ex. ["a"] → List<String>).
getter / setter
Accesseurs standard d'un Java Bean. Le getter (getXxx()) renvoie la valeur du champ, le setter (setXxx(value)) la modifie. En mode Lombok, ils sont générés par @Data ; en mode traditionnel, l'outil les génère explicitement.
Déclaration package
Première ligne non commentée d'un fichier Java, déclarant l'espace de noms de la classe. L'outil la génère à partir du package choisi et organise le ZIP en répertoire com/xxx/yy.
snake_case → camelCase
Conversion de stratégie de nommage. L'outil convertit automatiquement user_name → userName, is_active → isActive, created_at → createdAt, conformément aux conventions Java.
JSZip
Bibliothèque JavaScript de packaging ZIP côté navigateur. L'outil l'utilise pour générer le ZIP directement dans le navigateur, sans traitement serveur.
Historique localStorage
Stockage clé-valeur local du navigateur (capacité d'environ 5-10 Mo). L'outil y persiste les 200 dernières entrées.
Anti-rebond (Debounce)
Technique d'optimisation frontale : fusionner des événements haute fréquence en une seule exécution finale. L'outil applique un anti-rebond de 400 ms pour éviter les ralentissements sur les gros fichiers.
tryFixJSON
Fonction de réparation JSON intégrée à l'outil : corrige automatiquement les virgules superflues en fin, les apostrophes, les clés sans guillemets, la suppression des commentaires, etc.

Table de correspondance des types JSON vers types Java

Correspondance entre les types JSON inférés automatiquement par l'outil et les types Java générés :

Exemple de valeur JSONMéthode de détectionType Java généréValeur par défaut du champ
nullvalue === nullObjectnull
true / falsetypeof value === 'boolean'Booleanfalse
42typeof value === 'number' && Number.isInteger(value)Integer0
3.14typeof value === 'number' && !Number.isInteger(value)Double0.0
"hello"typeof value === 'string'Stringnull
[...] (tableau vide)Array.isArray(value) && value.length === 0List<Object>new ArrayList<>()
["a","b"]Array.isArray(value) && typeof value[0] === 'string'List<String>new ArrayList<>()
[1,2,3]Array.isArray(value) && typeof value[0] === 'number'List<Integer>new ArrayList<>()
[{...},{...}]Array.isArray(value) && typeof value[0] === 'object'List<Xxx>new ArrayList<>()
{...} (objet imbriqué)typeof value === 'object' && !Array.isArray(value)Xxx (classe distincte)new Xxx()

Comparatif des 4 bibliothèques d'annotations de sérialisation

Les 4 grandes bibliothèques d'annotations Java pour la sérialisation JSON prises en charge, à choisir selon le framework utilisé :

BibliothèqueAnnotations généréesImport automatiqueScénario d'usage
Sans annotationsAucune (POJO pur)AucunAucun framework ; désérialisation manuelle avec une bibliothèque générique comme jackson-databind
Gson@SerializedName("user_name")import com.google.gson.annotations.SerializedName;Applications Android, écosystème Google Gson, Retrofit + Gson
Jackson@JsonProperty("user_name") + @JsonFormat pour les champs de dateimport com.fasterxml.jackson.annotation.JsonProperty; + JsonFormatFramework de sérialisation par défaut de Spring Boot, API backend Web
Fastjson@JSONField(name = "user_name")import com.alibaba.fastjson.annotation.JSONField;Écosystème Alibaba, systèmes Java internes, scénarios haute performance de désérialisation
Lombok@Data au niveau de la classe (+ @Builder / @NoArgsConstructor / @AllArgsConstructor optionnels)import lombok.Data; (+ autres)Tous les projets cherchant à réduire le boilerplate ; combinable avec n'importe quelle bibliothèque de sérialisation

Comparatif des 4 stratégies de nommage des champs

Les 4 stratégies de conversion de nommage prises en charge, optimisées selon la source du JSON :

ModeRègleExempleScénario
Conserver tel queluser_nameuser_nameLe nom JSON respecte déjà la convention Java (par ex. API interne) ; ou l'équipe préfère le snake_case
Convertir en camelCaseuser_nameuserNameConvention recommandée en Java ; API backend en snake_case (par ex. backend Python / Go)
Tout en minusculesUserNameusernameIntégration avec certains champs de base de données (cas rare)
UPPER_SNAKEuser_nameUSER_NAMEDéfinition de constantes Java (public static final) ; généralement déconseillé pour des champs POJO

Comparatif Mode Lombok @Data vs Mode POJO traditionnel

Comparaison du nombre de lignes, de la lisibilité et des dépendances entre les deux styles :

AspectMode Lombok @DataMode POJO traditionnel
Nombre de lignes de code~5 lignes (4 annotations + champs)~50 lignes (4-5 lignes de getter/setter par champ + classe)
LisibilitéTrès élevée (tous les champs et annotations visibles d'un coup d'œil)Moyenne (beaucoup de code boilerplate)
Produit compiléBytecode complet (généré par le processeur Lombok dans l'IDE / javac)Bytecode complet (compilation directe)
Dépendance à l'exécutionDépendance Lombok requise (à la compilation)Aucune dépendance supplémentaire
Support IDEPlugin Lombok requis (IntelliJ / Eclipse)Support natif
Coût de maintenanceFaible (ajouter un champ suffit)Élevé (chaque champ demande getter/setter manuels)
Équipe concernéeProjets moyens à grands ayant déjà adopté LombokProjets refusant les annotations Lombok ; maintenance d'anciens projets

Privacy & Security

Cet outil JSON vers Java exécute toutes ses opérations (parsing JSON, génération de classes Java, packaging ZIP) entièrement en local dans votre navigateur, en JavaScript (JSZip). Ni les données JSON saisies, ni le code Java généré ne sont envoyés à un serveur, ni enregistrés, mis en cache ou stockés dans le cloud. Vous pouvez utiliser en toute confiance des JSON sensibles (champs d'API internes, structures métier non publiées, réponses d'API confidentielles) : toutes les données disparaissent à la fermeture de la page.

Authoritative References