Ce que fait cet outil
Un échantillon JSON devient des records Java, un par objet.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
public record Root(
Long id,
String firstName,
Address address
) {}
public record Address(
String city
) {}
Les records sont la façon la plus courte d’exprimer « des données et rien d’autre » en Java moderne : constructeur, accesseurs, equals, hashCode et toString viennent avec. Il faut Java 16 ou plus.
La clé survit au renommage
Un nom de composant suit les règles de Java : pas de tiret, pas de chiffre initial, pas de mot réservé. content-type devient contentType, class devient class_, 2fa devient f2fa. Chaque fois que le nom doit changer, la clé d’origine l’accompagne :
import com.fasterxml.jackson.annotation.JsonProperty;
public record Root(
@JsonProperty("content-type") String contentType,
@JsonProperty("class") Long class_,
Boolean ok
) {}
Sans cette annotation, Jackson cherche contentType et ne trouve rien — le record ne lit plus le document dont il a été engendré. Elle manquait jusqu’à l’écriture de cette page ; le défaut est corrigé, et l’annotation n’apparaît que là où le nom a réellement changé, avec son import.
Des types boxés, et pourquoi
Chaque nombre est un Long ou un Double, chaque booléen un Boolean. JSON a le null, les primitifs Java non, et un double qui reçoit un null devient 0.0 — une valeur qu’on ne distingue plus d’un vrai zéro. Les types boxés gardent le null représentable, ce que le format autorise.
Pour la même raison, null et les valeurs inconnues deviennent Object, et un tableau d’entre elles une List<Object>.
Ce qu’un échantillon ne peut pas dire
Rien n’est optionnel et rien n’est annoté @Nullable : chaque composant est là parce que le document le contenait. Les records sont immuables en surface : un champ dont vous déciderez plus tard qu’il peut manquer est un changement de forme, pas un drapeau.
Un scalaire à la racine — 42, "texte" — est refusé : Java n’a pas d’alias de type, il n’y a donc rien à nommer. Un tableau JSON d’objets vous rend le record de son élément, qui est la forme que vous liez réellement à une List<Root>.
Confidentiel par conception
Tout s’exécute localement dans votre navigateur en JavaScript. Vos données ne sont jamais envoyées sur un serveur, ce qui rend l’outil sûr pour des contenus sensibles, et il fonctionne hors ligne.