Convertir JSON en classes de données Kotlin — Numio
Génère des data classes Kotlin à partir d’un échantillon JSON. Les entiers deviennent Long, les décimaux Double, chaque objet imbriqué reçoit sa propre classe, et les clés absentes de certains éléments d’un tableau deviennent des types nullables comme Boolean?.
Modéliser une réponse REST pour une app Android qui parse le JSON avec Jackson.
Quand l’utiliser
- Modéliser une réponse REST pour une app Android qui parse le JSON avec Jackson.
- Créer des DTO pour un service Ktor ou Spring Boot à partir d’un payload d’exemple.
Mode d’emploi
- Collez un objet ou un tableau JSON représentatif dans l’éditeur JSON ; incluez des éléments de tableau qui montrent les clés optionnelles.
- Lisez le panneau Kotlin : la classe de premier niveau s’appelle Root et les classes imbriquées prennent le nom de leur clé (projects devient Project).
- Copiez les classes, renommez Root et remplacez Any? ou Long là où le contrat de votre API indique autre chose.
Entrée JSON
{
"id": 1024,
"full_name": "Ada Lovelace",
"email": null,
"roles": ["admin", "editor"],
"projects": [
{ "name": "Engine", "stars": 42 },
{ "name": "Notes", "stars": 7, "archived": true }
]
}Data classes Kotlin
import com.fasterxml.jackson.annotation.JsonProperty
data class Root(
val id: Long,
@JsonProperty("full_name")
val fullName: String,
val email: Any?,
val roles: List<String>,
val projects: List<Project>,
)
data class Project(
val name: String,
val stars: Long,
val archived: Boolean?,
)Détails et limites
La conversion s’exécute dans votre navigateur avec le module WebAssembly json_typegen ; le JSON n’est pas envoyé. Cette page n’a pas de paramètres.
Les clés qui ne sont pas en camelCase reçoivent une annotation Jackson @JsonProperty et l’import com.fasterxml.jackson.annotation.JsonProperty. Aucune annotation kotlinx.serialization ou Moshi n’est générée.
Les valeurs null et les tableaux vides ne portent aucune information de type ; ils deviennent donc Any? et List<Any?>.
Les champs nullables n’ont pas de valeur par défaut (= null). Ajoutez-en vous-même si le champ peut être absent lors de la désérialisation.
FAQ
Pourquoi un entier est-il typé Long et non Int ?
Le générateur utilise toujours Long pour les nombres entiers afin que les grands identifiants ne débordent pas. Les nombres trop grands pour un entier 64 bits, ou écrits avec un point décimal, deviennent Double.
Puis-je convertir un tableau JSON à la racine ?
Oui. Un tableau racine produit un typealias, par exemple typealias Root = List<Root2>;, plus une data class Root2 pour le type des éléments. Renommez les deux selon votre code.
Pourquoi un court tableau mixte est-il devenu Pair<Long, String> ?
json_typegen traite un court tableau dont les éléments ont des types différents comme un tuple : [1, "a"] devient donc Pair<Long, String>. Remplacez-le par List<Any> si le tableau est réellement une liste.