PK Systems PK Systems
Ontwikkelaarstools

JSON naar TypeScript / Go / Rust

Plak elke JSON-sample. Krijg schone TypeScript-interfaces, Go-structs of Rust-types met serde-tags — snel, lichtgewicht en klaar om in je code te plakken.

JSON naar TypeScript / Go / Rust

Uitvoer

Uitvoer verschijnt hier tijdens typen.

Wat doet deze converter

Loopt door een JSON-sample, infereert een type voor elke waarde en geeft een idiomatic type-definitie in je gekozen taal. Objects worden interfaces (TypeScript), structs (Go, Rust), en geneste objects produceren broer-typedefinities. Arrays van objects voegen hun element-vormen samen — velden in sommige items maar niet andere worden optioneel gemarkeerd, en primitieve waarden die variëren (string in sommige, integer in andere) klappen samen tot een union of serde_json::Value in Rust. Geen data wordt verstuurd — de hele inferrer draait in je browser.

Zo gebruik je het

Plak een representatieve JSON-payload (idealiter één record uit je API-response), kies de doeltaal en kopieer het resultaat. Heeft je JSON meerdere instances van dezelfde vorm (een gepagineerde lijst bijvoorbeeld), neem de array mee — de inferrer leert van variantie. De casing-toggle hernoemt velden in de uitvoer zonder de JSON-keys aan te raken; voor Go en Rust blijft de oorspronkelijke key als struct-tag behouden zodat serialisatie round-trips.

Tips en valkuilen

  • Optional vs nullable: een veld dat in sommige records ontbreekt wordt ? / Option<T>, maar een veld overal aanwezig met letterlijke null-waarde wordt een union met null — twee verschillende dingen, apart geïnferreerd.
  • Getallen: integers blijven integers in Go en Rust (int64, i64); floats worden float64 / f64. TypeScript klapt beide samen tot number omdat de taal niet onderscheidt.
  • Lege arrays: [] infereert naar unknown[] / []interface{} / Vec<serde_json::Value> — drop een sample-item erin voor een echt type.
  • Veld-hernoemen: alleen de inferrer hernoemt. Je JSON-parser moet keys nog steeds mappen — Go gebruikt de json:-struct-tag, Rust gebruikt #[serde(rename = ...)].

Veelgestelde vragen

Hoe gaat het om met arrays van gemengde types?
Het verenigt element-vormen. Bevat een array [1, 2, "x"], dan wordt het element-type number | string. Bevat het [{a: 1}, {a: 1, b: 2}], dan wordt het element één object-type met a required en b optioneel. In Go en Rust waar unions geen schoon equivalent hebben, klappen gemengde primitives samen naar interface{} / serde_json::Value.
Verwerkt het diep geneste structuren?
Ja — geen dieptelimiet. Elk genest object wordt vernoemd naar zijn parent-key (gehoofdletterd, ge-singulariseerd wanneer parent meervoud is), en een interne tabel voorkomt naam-botsingen door een numerieke suffix. Zelf-refererende structuren als bomen worden niet auto-gedetecteerd; je moet mogelijk twee gegenereerde types met de hand samenvoegen als je data een cyclus vormt.
Waarom zijn mijn Go-veldnamen PascalCase ook al kies ik behouden?
Go vereist dat geëxporteerde struct-velden met een hoofdletter beginnen — een taalregel, geen stijlkeuze. Lowercase-veldnamen zouden privé en onzichtbaar zijn voor encoding/json. De originele JSON-key wordt in de json:-tag bewaard, dus serialisatie geeft nog steeds de input-casing.
Hoe verschilt dit van zware code-generators?
Enterprise-generators ondersteunen tientallen doeltalen, JSON Schema-input, discriminated unions, named enums en multi-pass-refinement — handig bij een formeel schema en een groot team. Deze tool is een lichtgewicht inferrer met TypeScript-, Go- en Rust-uitvoer en geen setup. Voor one-shot "geef me een type voor deze API-response"-workflows is het sneller en de uitvoer makkelijker te scannen en handmatig te bewerken.
Compileert mijn uitvoer?
Vrijwel altijd ja voor TypeScript. Go- en Rust-uitvoer is ook compileerbaar as-is, maar je moet mogelijk de juiste imports toevoegen (use serde::{Deserialize, Serialize}; voor Rust is inbegrepen; Go's encoding/json is impliciet). Botsen je JSON-keys met gereserveerde woorden na hernoemen, dan gebruikt Rust automatisch r# raw identifiers.
Wordt er iets naar een server gestuurd?
Nee. De parser is de JSON.parse van de browser en de inferrer is een kleine recursieve functie op deze pagina. Open DevTools > Network: geen requests tijdens typen. Veilig voor productie-payloads, interne API-responses en alles wat je niet in een gehoste SaaS zou plakken.