JSON en classe Java (POJO)
Générez une classe Java compilable à partir d'un JSON d'exemple ; les objets imbriqués deviennent des classes, les champs absents des types enveloppes
Vos données restent chez vous. La conversion se fait dans le navigateur ; rien n'est envoyé à un serveur.
Cet outil a-t-il fait le travail ?
Merci, votre retour nous est bien parvenu.
Comment ça marche
Pour lire en Java la réponse d'une API REST sous forme d'objets, il faut d'abord des classes qui correspondent au JSON ; les écrire à la main devient long et source d'erreurs dès que les champs se multiplient. Collez une réponse d'exemple à gauche et saisissez un nom de classe racine (par exemple Commande) : le code Java apparaît à droite. Chaque objet imbriqué devient sa propre classe, écrite dans la classe racine en public static class, si bien que la sortie se compile en un seul fichier Commande.java. Un tableau d'objets devient List<...>, et la classe des éléments porte le singulier du nom du tableau : « articles » → Article. Toutes les entrées d'un tableau sont fusionnées en un type : un champ absent d'une entrée figure quand même dans la classe, mais avec un type enveloppe comme Integer, Double ou Boolean, pour pouvoir valoir null. Les entiers deviennent int, au-delà d'environ 2 milliards long, les décimaux double ; le type est lu dans l'écriture du nombre, donc 590.0 reste double. Une clé comme « nom_client » devient le champ nomClient, avec @JsonProperty("nom_client") pour que Jackson fasse le lien. Choisissez record pour des types courts et immuables à partir de Java 16.
Cet outil est aussi connu sous le nom de json en classe java, json to java, json to pojo, convertir json en java, json vers java record.
Qu'est-ce que POJO ?
Un POJO (Plain Old Java Object) est une classe Java simple, liée à aucun framework : champs privés, constructeur sans argument et méthodes getter/setter pour les champs. Jackson, Gson et Spring attendent exactement cette forme pour transformer du JSON en objets Java, en faisant correspondre les noms de champs aux clés JSON. C'est pourquoi appeler une API depuis Java commence souvent par écrire les POJO de ses réponses.
Qu'est-ce que Record Java ?
Un record est une forme de classe compacte apparue avec Java 16 pour transporter des données : la ligne record Article(String produit, int qte) {} génère automatiquement champs, constructeur, accesseurs, equals et hashCode. Un record est immuable : ses champs ne changent plus après la construction. Jackson lit les records directement depuis la version 2.12. Ils conviennent aux réponses d'API qu'on lit et qu'on affiche.
Quelle est la différence entre un POJO et un record en Java ?
Un POJO est la classe classique avec un getter et un setter par champ : long, mais il fonctionne sur toutes les versions de Java et l'objet peut être modifié après lecture. Un record décrit les mêmes données en une ligne ; le compilateur génère accesseurs, equals, hashCode et toString. Il exige Java 16 ou plus et il est immuable. Jackson lit les deux (les records depuis 2.12). Pour du code qui lit et affiche une réponse d'API, un record suffit en moins de lignes ; si vous modifiez l'objet et le renvoyez, prenez un POJO.
Comment les types sont déduits : fusion, types enveloppes, noms
L'outil déduit à partir d'un seul exemple : plus votre exemple montre de variantes, plus la classe est juste. Les entrées d'un tableau sont fusionnées : si le premier article a une remise et le second non, remise figure quand même dans la classe, mais en Double et pas en double, car Jackson met à null un champ absent et un double primitif ne peut pas valoir null. Un champ vu à null prend aussi un type enveloppe ; un champ toujours null n'a pas de type connu et devient Object.
Si un champ montre des types différents (nombre dans une entrée, texte dans une autre), le type commun est Object ; un tableau vide devient List<Object>. Les mots réservés de Java comme class ou default ne peuvent pas servir de nom de champ : ils reçoivent un tiret bas final, et le nom d'origine reste dans @JsonProperty. Si un nom de classe tiré d'une clé heurte un type Java comme String ou List, un 2 est ajouté.
- [{"a":1},{"b":2}] → Integer a; Integer b; (chacun absent d'un enregistrement)
- {"note": null} → Object note (type inconnu)
- {"total": 590.0} → double (le .0 du JSON est pris en compte)
- {"nom_client": "x"} → @JsonProperty("nom_client") String nomClient
Classe ou record, et limites honnêtes
Le style classe fonctionne sur toutes les versions de Java et avec les réglages par défaut de Jackson, Gson et Spring : champs privés, un getter et un setter par champ ; le getter d'un boolean s'appelle isX. Le style record existe depuis Java 16 : les champs sont des paramètres du constructeur, le type est immuable, et Jackson 2.12 ou plus le lit directement. Choisissez la classe si votre équipe utilise un Java plus ancien ou si vous modifiez l'objet après lecture.
Limites honnêtes : les dates en texte (2026-09-27) ne deviennent pas des LocalDate et les listes de valeurs fixes ne deviennent pas des enum ; elles restent String. Les noms JSON inhabituels (avec espaces ou accents) sont adaptés pour Java, @JsonProperty garde l'original. Sans Jackson, supprimez l'import et les annotations ou remplacez-les par l'équivalent de votre bibliothèque (@SerializedName avec Gson).
Questions fréquentes
Comment créer une classe Java à partir d'un JSON ?
Collez un JSON d'exemple dans le panneau de gauche de cette page et saisissez le nom de la classe racine. À droite apparaît une classe Java avec les objets imbriqués en classes internes statiques et les getters et setters prêts. Copiez le code et enregistrez-le dans votre projet sous le nom de la classe racine (par exemple Commande.java).
Pourquoi certains champs sont-ils Integer et pas int ?
Ce champ manque dans certaines entrées d'un tableau, ou il valait null dans le JSON. Jackson met à null un champ absent ou null, et un int primitif ne peut pas valoir null : le champ est donc écrit Integer. Si vous êtes sûr que chaque champ est toujours présent, réglez Champs absents ou null sur Obligatoire, et int sera utilisé.
Pourquoi une annotation @JsonProperty a-t-elle été ajoutée ?
Quand une clé JSON ne suit pas les conventions de nommage Java (nom_client, pre-nom), le nom du champ passe en camelCase : nomClient. Pour que Jackson associe ce champ à la bonne clé à la lecture, le nom d'origine est écrit dans @JsonProperty("nom_client"). Les clés déjà en camelCase ne reçoivent pas d'annotation.
Le JSON collé est-il envoyé à un serveur ?
Non. La déduction des types et l'écriture du code Java se font entièrement dans votre navigateur ; même une réponse d'exemple avec des données clients ou des clés d'API ne quitte pas cette page. Une fois chargée, la page fonctionne hors connexion.