PK Systems PK Systems
Outils pour développeurs

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.

JSON vers TypeScript / Go / Rust

Résultat

Le résultat apparaît ici pendant que vous tapez.

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érale null devient une union avec null — 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 deviennent float64 / f64. TypeScript rabat les deux sur number car le langage ne fait pas la distinction.
  • Tableaux vides : [] est inféré en unknown[] / []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 ?
Il unifie les formes des éléments. Si un tableau contient [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 ?
Oui — il n'y a pas de limite de profondeur. Chaque objet imbriqué prend le nom de sa clé parente (capitalisée, mise au singulier quand le parent est au pluriel), et une table interne évite les collisions de noms en ajoutant un suffixe numérique. Les structures auto-référentielles (arbres) ne sont pas détectées automatiquement ; vous devrez peut-être fusionner deux types générés à la main si vos données forment un cycle.
Pourquoi mes noms de champs Go sont-ils en PascalCase même en mode préserver ?
Go exige que les champs de struct exportés commencent par une majuscule — c'est une règle du langage, pas un choix de style. Des noms en minuscules seraient privés et invisibles pour 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 ?
Les générateurs d'entreprise prennent en charge des dizaines de langages cibles, l'entrée JSON Schema, les unions discriminées, les enums nommés et le raffinement multi-passes — utile quand on a un schéma formel et une grosse équipe. Cet outil est un inférenceur léger et sans tracas avec sortie TypeScript, Go et Rust et zéro configuration. Pour les workflows ponctuels du type « donne-moi un type pour cette réponse d'API », il est plus rapide et la sortie est plus facile à parcourir et à éditer à la main.
Mon résultat va-t-il compiler ?
Presque toujours en TypeScript. Le code Go et Rust est aussi compilable tel quel, mais vous devrez peut-être ajouter les bons imports (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 ?
Non. Le parseur est le 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é.