MiServe DevTools

Vos autocollants

Épinglez vos outils ici. Ils sont enregistrés dans ce navigateur.

Convertisseur JSON vers struct Go et TypeScript

Transformez un échantillon JSON en structs Go, en interfaces ou types TypeScript, ou en JSON Schema, avec détection des clés facultatives, de null et des dates.

S'exécute dans votre navigateur. Rien de ce que vous collez n'est envoyé.

À propos de cet outil

Ce qui est déduit de l'échantillon

L'outil parcourt la valeur JSON et note ce qu'il trouve à chaque position. Les éléments d'un tableau sont fusionnés en une seule description : une clé absente de certains objets devient facultative, une valeur qui vaut parfois null devient nullable, et un tableau contenant des valeurs de natures différentes devient une union en TypeScript et []any en Go.

Un nombre n'est un entier que si chacune de ses occurrences s'écrit sans point décimal ni exposant et tient dans un entier signé de 64 bits ; sinon, c'est un nombre à virgule flottante. Une chaîne ne devient une date-heure que si chacune de ses occurrences est une date-heure RFC 3339, comme 2026-11-14T10:00:00Z. Une date sans heure reste une chaîne.

Chaque objet imbriqué reçoit un type nommé d'après sa clé. Pour les éléments d'un tableau, le nom est mis au singulier quand la clé est un pluriel anglais régulier : users donne User et categories donne Category ; sinon, Item est ajouté à la fin. Avec Types imbriqués en ligne, les objets imbriqués sont plutôt écrits à l'intérieur de leur parent.

La sortie Go

Les noms de champs sont exportés et suivent la convention Go pour les sigles : user_id devient UserID et html_url devient HTMLURL, tandis que le tag json conserve la clé d'origine. Les entiers sont des int, ou des int64 quand une occurrence ne tient pas sur 32 bits, car la spécification Go autorise un int de 32 bits. Les autres nombres sont des float64 et les dates-heures des time.Time. La différence entre 1 et 1.0 compte : encoding/json refuse de décoder 1.0 dans un champ int.

Avec Ajouter omitempty aux champs facultatifs activé, une clé absente de certains échantillons reçoit omitempty dans son tag et garde son type simple. Un scalaire ou une struct qui peut valoir null devient un pointeur, comme *string, pour que null et la valeur zéro restent distincts ; une slice ou une map n'a pas besoin de pointeur, car elle peut valoir nil. Une valeur qui ne vaut jamais autre chose que null devient any. Les structs imbriquées facultatives et les champs time.Time facultatifs deviennent aussi des pointeurs, car omitempty n'omet jamais une valeur de type struct. Les colonnes sont alignées comme le fait gofmt.

Certaines clés ne peuvent pas être associées à un champ de struct. Aucun tag json ne peut désigner une clé vide ou une clé qui contient une virgule, un guillemet ou une barre oblique inverse. Le encoding/json d'origine ignore en outre un nom de tag qui contient autre chose que des lettres, des chiffres et la ponctuation courante : une clé avec un diacritique combinant ou un emoji n'est donc associée que par l'implémentation basée sur encoding/json/v2. Quand l'échantillon contient de telles clés, l'outil les liste sous la sortie.

Les sorties TypeScript et JSON Schema

En TypeScript, une clé facultative s'écrit avec ?:, une valeur nullable avec | null, et une clé qui n'est pas un identifiant valide est mise entre guillemets. Les dates-heures sont typées string, puisque c'est ce que renvoie JSON.parse, avec un commentaire qui les signale. La forme interface et la forme alias de type décrivent la même structure : choisissez celle qu'utilise votre base de code.

La sortie JSON Schema suit le draft 2020-12. Les clés présentes dans tous les échantillons sont listées sous required, les entiers sont des integer, les dates-heures portent format: date-time, et les types d'objets nommés sont placés sous $defs et référencés avec $ref.

Un échantillon montre à quoi ressemblait un document, pas tout ce qu'une API peut renvoyer. Vérifiez les champs facultatifs et nullables dans la documentation de l'API avant de vous fier au résultat.

Questions

Comment l'outil sait-il qu'un champ est facultatif ?

Il ne peut le déduire que des tableaux. Quand les objets d'un même tableau n'ont pas tous les mêmes clés, une clé absente d'au moins l'un d'eux est facultative. Un objet isolé ne fournit aucun indice : toutes ses clés sont donc considérées comme obligatoires.

Pourquoi un nombre devient-il un int et un autre un float64 ?

Un nombre est typé comme entier quand chacune de ses occurrences s'écrit sans point décimal ni exposant et tient dans un entier de 64 bits. En Go, c'est un int, ou un int64 quand une occurrence sort de la plage des 32 bits. Si une seule occurrence vaut 2.5, ou s'écrit 1.0, le champ devient float64 en Go et number en JSON Schema. TypeScript utilise number pour tous les nombres.

Que se passe-t-il quand une valeur est null ?

Si le même champ a aussi une occurrence non nulle, le type devient nullable : en Go, un pointeur, ou une slice ou une map, qui peut déjà valoir nil ; en TypeScript, une union avec null ; en JSON Schema, un schéma qui accepte aussi null. Si null est la seule occurrence, on ne sait rien du type réel : le résultat est donc any en Go et null en TypeScript et en JSON Schema.

Mon JSON est-il envoyé à un serveur ?

Non. Les types sont générés par JavaScript dans l'onglet de votre navigateur. L'outil n'envoie aucune requête réseau avec ce que vous collez, et la politique de sécurité du site bloque les requêtes vers tout autre hôte.

Autres outils de la catégorie Données