Aller au contenu
Toova
Tous les outils

JSON vers TypeScript, Go, Python, PHP, Rust

Conçu pour la confidentialité — fonctionne entièrement dans votre navigateur

Inférer les bonnes définitions de types à partir d'une vraie réponse d'API fait partie de ces tâches qui devraient prendre cinq secondes mais qui en dévorent quinze. Cet outil lit un échantillon JSON dans votre navigateur, parcourt la structure et émet des types idiomatiques pour TypeScript, Go, Python, PHP ou Rust — avec champs facultatifs, détection de dates ISO et distinction correcte entre entier et flottant.

Comment fonctionne l'inférence

L'outil parcourt l'arbre JSON une seule fois, en construisant une représentation intermédiaire : les primitifs deviennent string / int / float / bool / null, les tableaux infèrent le type d'élément à partir de l'union de leurs membres, et les objets produisent une structure dont les types de champ proviennent des valeurs. Si un champ apparaît dans certains éléments du tableau et pas dans d'autres, il est marqué facultatif — le type généré décode des données partielles sans casser. Les nombres sans partie fractionnaire deviennent int64 (Go) / int (Python) / i64 (Rust), et avec une partie fractionnaire deviennent float64 / float / f64. Les chaînes au format ISO 8601 (`2024-03-15T10:30:00Z`) deviennent Date / time.Time / datetime / DateTimeInterface / chrono::DateTime.

Style de sortie par langage

Chaque émetteur suit les conventions de son langage cible. TypeScript : interfaces exportées avec la syntaxe `?:`. Go : structures avec balises `json:`, facultatifs en pointeur avec `omitempty`. Python : `@dataclass`, champs requis d'abord et `Optional[T] = None` à la fin (règle d'ordre des dataclass). PHP : classes final en typage strict avec annotations `@var list<T>` pour les tableaux typés. Rust : structures `#[derive(Serialize, Deserialize)]`, `Option<T>` pour les champs nullables et `#[serde(rename)]` quand le nom snake_case en Rust diffère de la clé JSON.

Quand l'utiliser (et quand non)

Le générateur résout les premiers 80 % du travail : obtenir une définition de type fonctionnelle à partir d'un payload en quelques secondes. Il ne remplace pas un schéma écrit à la main quand vous avez besoin de contraintes précises (regex sur chaînes, min/max sur nombres, unions discriminées). Pour ces cas, prenez la sortie comme point de départ et resserrez les types. La détection des facultatifs est heuristique — fondée sur ce qui est présent dans votre échantillon — alors passez plusieurs échantillons divers si possible.

Questions fréquentes

Le JSON que je colle quitte-t-il mon navigateur ?
Non. L'analyseur, l'inférence de types et l'émission du code s'exécutent tous en JavaScript dans votre onglet. Ouvrez le panneau Réseau pendant que vous générez — zéro requête sortante. Sûr pour les payloads de production avec de vrais tokens et PII.
Pourquoi mon champ est-il facultatif alors qu'il a toujours une valeur ?
Le drapeau facultatif est activé quand un tableau contient des objets avec le champ et d'autres sans. Si vous collez un seul objet, rien n'est marqué facultatif. Si vous collez un tableau d'objets identiques, idem. Le drapeau ne se déclenche que quand la structure à l'intérieur du tableau varie.
Comment l'outil distingue-t-il entier et flottant ?
JSON n'a qu'un seul type numérique. L'outil inspecte chaque valeur et émet int quand la valeur n'a pas de partie fractionnaire (`42`, `1000`) et float quand elle en a une (`3.14`, `99.0`). Si un tableau mélange les deux, le type est élargi à float pour éviter une décodage avec perte.
Détecte-t-il les chaînes de date ISO ?
Oui. Les chaînes correspondant à `YYYY-MM-DD` ou `YYYY-MM-DDTHH:MM:SS[.sss][Z|±HH:MM]` sont émises comme le type natif de date/heure du langage (Date en TS, time.Time en Go, datetime en Python, DateTimeInterface en PHP, chrono::DateTime en Rust). Les autres formats restent des chaînes.
Dois-je installer quelque chose pour utiliser le code généré ?
TypeScript : rien, c'est pur. Go : seulement la bibliothèque standard (time.Time quand il y a des dates ISO). Python : module dataclasses standard. PHP : types natifs. Rust : nécessite serde + chrono s'il y a des dates ISO. Les en-têtes / imports sont écrits dans la sortie quand c'est applicable.
Puis-je générer des types pour un tableau d'objets à la racine ?
Oui. Si la valeur racine est un tableau d'objets, l'outil émet une structure pour l'élément et un alias de type au sommet pour le tableau. Par exemple, un JSON `[{...}, {...}]` nommé `Users` produit une interface `User` plus `type Users = User[];` en TypeScript, ou `pub type Users = Vec<User>;` en Rust.