JSON vers TypeScript / Go / Rust
Collez un échantillon JSON. Obtenez des interfaces TypeScript propres, des structs Go ou des types Rust avec tags serde — rapide, léger, prêt à coller dans votre code.
Ce que fait ce convertisseur
Il parcourt un échantillon JSON, déduit un type pour chaque valeur et émet une définition de type idiomatique dans le langage choisi. Les objets deviennent des interfaces (TypeScript) ou des structs (Go, Rust), et les objets imbriqués produisent des définitions de types frères. Les tableaux d'objets unifient leurs formes — les champs présents dans certains éléments mais pas dans d'autres sont marqués optionnels, et les valeurs primitives qui varient (chaîne dans certains, entier dans d'autres) sont rabattues sur une union ou sur serde_json::Value en Rust. Aucune donnée n'est envoyée — l'inférenceur tourne entièrement dans votre navigateur.
Comment l'utiliser
Collez une charge JSON représentative (idéalement un enregistrement de votre réponse d'API), choisissez le langage cible et copiez le résultat. Si votre JSON contient plusieurs instances d'une même forme (une liste paginée, par exemple), incluez le tableau — l'inférenceur tire plus d'enseignements de la variance. Le bouton de casse renomme les champs en sortie sans toucher aux clés JSON elles-mêmes ; pour Go et Rust, la clé d'origine est préservée dans un tag de struct pour que la sérialisation fasse l'aller-retour.
Astuces et pièges
- Optionnel vs nullable : un champ absent de certains enregistrements devient
?/Option<T>, mais un champ présent partout avec une valeur littéralenulldevient une union avecnull— les deux sont distincts et inférés séparément. - Nombres : les entiers restent des entiers en Go et Rust (
int64,i64) ; les décimaux deviennentfloat64/f64. TypeScript rabat les deux surnumbercar le langage ne fait pas la distinction. - Tableaux vides :
[]est inféré enunknown[]/[]interface{}/Vec<serde_json::Value>— ajoutez un échantillon pour obtenir un vrai type. - Renommage de champs : seul l'inférenceur renomme. Votre parseur JSON doit toujours mapper les clés — Go utilise le tag
json:, Rust utilise#[serde(rename = ...)].
Questions fréquentes
Comment gère-t-il les tableaux à types mélangés ?
[1, 2, "x"], le type de l'élément devient number | string. Si il contient [{a: 1}, {a: 1, b: 2}], l'élément devient un type d'objet avec a requis et b optionnel. En Go et en Rust où les unions n'ont pas d'équivalent propre, les primitives mélangées tombent sur interface{} / serde_json::Value.Gère-t-il des structures profondément imbriquées ?
Pourquoi mes noms de champs Go sont-ils en PascalCase même en mode préserver ?
encoding/json. La clé JSON d'origine est préservée dans le tag json:, donc la sérialisation produit toujours la casse d'entrée.En quoi est-ce différent des gros générateurs de code ?
Mon résultat va-t-il compiler ?
use serde::{Deserialize, Serialize}; est inclus pour Rust ; encoding/json de Go est implicite). Si vos clés JSON entrent en collision avec des mots réservés après renommage, Rust utilise automatiquement les identifiants bruts r#.Y a-t-il quelque chose envoyé à un serveur ?
JSON.parse du navigateur et l'inférenceur est une petite fonction récursive sur cette page. Ouvrez DevTools > Réseau et vous ne verrez aucune requête pendant que vous tapez. Sûr pour des charges de production, des réponses d'API internes et tout ce que vous ne colleriez pas dans un SaaS hébergé.