Aller au contenu

Convertir du JSON en types TypeScript, Go, Python et plus

Collez des exemples JSON et obtenez des interfaces TypeScript, des schémas Zod, des structs Go et des types Python, Java, C#, Kotlin, Swift et Rust, générés dans votre navigateur.

Plusieurs échantillons (à la suite ou au format JSON Lines) et les objets d’un même tableau sont fusionnés : les clés absentes à certains endroits deviennent facultatives, les valeurs null acceptent null.

TypeScript
Collez un échantillon, puis cliquez sur Générer les types.
Déclarer en tant que
Fonctionne dans votre navigateur · aucun envoiComment ça marche

Comment utiliser JSON vers types

  1. 1

    Collez des échantillons JSON

    Collez une réponse, un tableau d’enregistrements ou plusieurs réponses à la suite ; l’exemple montre deux utilisateurs fusionnés.

  2. 2

    Choisissez le langage

    Choisissez TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift ou Rust, puis les options de style correspondantes.

  3. 3

    Nommez le type racine

    Indiquez le nom du type de premier niveau, par exemple User ou OrderResponse.

  4. 4

    Générez et copiez

    Cliquez sur Générer les types, puis copiez le code ou téléchargez-le ; vos modifications le régénèrent automatiquement.

Limites et Pro

Gratuit et sans inscription : 9 langages de sortie avec 3 styles Python, un nombre illimité d’échantillons fusionnés et des fichiers jusqu’à 20 Mo, avec une génération interrompue après 30 secondes.

Pro supprime les publicités ; le générateur est identique quelle que soit l’offre. Découvrir Pro

À propos de JSON vers types

Écrire à la main les types d’une réponse d’API est long et source d’erreurs, surtout quand les données sont imbriquées sur trois niveaux. Collez un ou plusieurs échantillons JSON : ce générateur déduit la structure et produit des définitions prêtes à coller dans neuf variantes : interfaces ou alias de type TypeScript, TypeScript avec schémas Zod pour la validation à l’exécution, structs Go avec tags json, dataclasses, TypedDict ou modèles Pydantic v2 pour Python, records Java avec annotations Jackson, classes C# pour System.Text.Json, data classes Kotlin pour kotlinx.serialization, structs Swift Codable et structs Rust pour serde.

Un seul échantillon montre rarement tous les champs : le générateur fusionne donc tous ceux que vous lui donnez. Collez plusieurs documents à la suite, au format JSON Lines, ou un tableau d’objets : une clé absente de certains objets devient facultative, une clé parfois null devient nullable, un entier parfois décimal devient un flottant, et les valeurs vraiment hétérogènes deviennent une union ou le type JSON dynamique du langage. Les objets imbriqués reçoivent leur propre type nommé (orders devient Order, addresses devient Address), et les structures identiques ne sont générées qu’une fois puis réutilisées. Les objets dont les clés sont des nombres, des UUID ou des dates sont transformés en maps.

Les noms de champs sont convertis selon les conventions de chaque langage, et les clés JSON qui diffèrent, comme first-name ou class, sont rattachées au bon nom grâce à l’annotation, à l’alias ou aux CodingKeys appropriés. Les commentaires et les virgules finales de l’échantillon sont tolérés.

Le résultat décrit les échantillons que vous fournissez ; le générateur ne peut pas connaître les champs ou valeurs absents de vos échantillons. Comparez-le donc à la documentation de votre API avant de vous y fier.

Confidentialité

Les échantillons sont analysés et le code est généré par un Web Worker dans cet onglet : les réponses d’API contenant des données personnelles ou internes ne sont jamais envoyées. Les options de langage et de nommage sont enregistrées dans le stockage local ; le JSON que vous collez n’est pas conservé.

Fonctionnalités

Fusion de plusieurs échantillons

Les clés manquantes deviennent facultatives et les valeurs null nullables, sur l’ensemble des échantillons collés.

9 langages

TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift et Rust, avec des noms conformes aux conventions de chacun.

Correspondance des clés incluse

Les tags json, alias, @SerialName, @JsonProperty et CodingKeys conservent les noms JSON d’origine.

JSON vers types : questions fréquentes

Comment décide-t-il quels champs sont facultatifs ?
Un champ est facultatif lorsqu’au moins un des objets à cet endroit ne contient pas la clé. Si vous collez un seul objet, tous les champs sont obligatoires, car rien ne prouve le contraire. Collez plusieurs vraies réponses, ou un tableau d’enregistrements, pour que le générateur voie quelles clés apparaissent ou disparaissent. L’option Rendre tous les champs facultatifs sert aux données partielles ou aux requêtes de type patch.
Que se passe-t-il quand une valeur est parfois null ?
Le champ devient nullable : string | null en TypeScript, un pointeur en Go, str | None en Python, String? en Kotlin et Swift, Option<String> en Rust, et un type encapsulé ou nullable en Java et C#. Un champ toujours null dans tous les échantillons n’a aucun type à déduire : il devient le type inconnu ou JSON dynamique du langage.
Pourquoi mes entiers sont-ils devenus des flottants ?
Si un échantillon contient 7 et un autre 7.5 pour le même champ, le type doit pouvoir accueillir les deux : il devient donc un float ou un double. Les nombres écrits avec un point décimal, comme 10.0, comptent aussi comme décimaux. En TypeScript, les deux sont de type number ; avec Zod, un champ uniquement entier est vérifié par z.number().int().
Est-ce la même chose que quicktype ?
Il résout le même problème avec son propre générateur, qui s’exécute entièrement dans votre navigateur et ajoute quelques atouts : trois styles Python dont TypedDict, des schémas Zod et la fusion de plusieurs documents collés. quicktype prend en charge davantage de langages et peut lire du JSON Schema. Pour les neuf langages proposés ici, le code est conçu pour compiler sans bibliothèque d’exécution supplémentaire.
Peut-il détecter les dates, les enums ou les UUID ?
Non. Les chaînes restent des chaînes, car quelques échantillons ne prouvent pas que toutes les valeurs futures seront des dates ou appartiendront à un ensemble fixe. Modifiez à la main le type généré en Date, time.Time, datetime, enum ou UUID lorsque votre API le garantit. Les objets indexés par des UUID, des nombres ou des dates font exception : ils deviennent des maps.