Naar inhoud springen

JSON converteren naar TypeScript, Go, Python en meer

Plak JSON-voorbeelden en krijg TypeScript-interfaces, Zod-schema's, Go-structs en types voor Python, Java, C#, Kotlin, Swift en Rust, gegenereerd in je browser.

Meerdere voorbeelden (achter elkaar of als JSON Lines) en de objecten in arrays worden samengevoegd: sleutels die ergens ontbreken worden optioneel, null-waarden nullable.

TypeScript
Plak een voorbeeld en klik op Types genereren.
Declareren als
Werkt in je browser · geen uploadZo werkt het

Zo gebruik je JSON naar types

  1. 1

    Plak JSON-voorbeelden

    Plak één respons, een array van records of meerdere responses achter elkaar; het voorbeeld toont twee samengevoegde gebruikers.

  2. 2

    Kies de taal

    Kies TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift of Rust, en de bijbehorende stijlopties.

  3. 3

    Geef het roottype een naam

    Stel de naam van het type op het hoogste niveau in, bijvoorbeeld User of OrderResponse.

  4. 4

    Genereren en kopiëren

    Klik op Types genereren en kopieer de code of download die; bij wijzigingen wordt de code automatisch opnieuw gegenereerd.

Limieten en Pro

Gratis zonder account: 9 uitvoertalen met 3 Python-stijlen, een onbeperkt aantal samengevoegde voorbeelden en bestanden tot 20 MB, waarbij het genereren na 30 seconden stopt.

Pro haalt de advertenties weg; de generator is bij elk abonnement hetzelfde. Pro bekijken

Over JSON naar types

Types met de hand schrijven voor een API-respons kost veel tijd en gaat snel mis, zeker als de data drie niveaus diep genest is. Plak een of meer JSON-voorbeelden en deze generator leidt de structuur af en schrijft kant-en-klare definities in negen varianten: TypeScript-interfaces of type-aliassen, TypeScript met Zod-schema's voor validatie tijdens runtime, Go-structs met json-tags, Python-dataclasses, TypedDicts of Pydantic v2-modellen, Java-records met Jackson-annotaties, C#-klassen voor System.Text.Json, Kotlin-dataklassen voor kotlinx.serialization, Swift Codable-structs en Rust-structs voor serde.

Eén voorbeeld toont zelden alle velden, dus voegt de generator samen zoveel voorbeelden als je invoert. Plak meerdere documenten achter elkaar, als JSON Lines of als array van objecten: een sleutel die in sommige objecten ontbreekt wordt optioneel, een sleutel die soms null is wordt nullable, een geheel getal dat soms een decimaal getal is wordt een float, en echt gemengde waarden worden een union of het dynamische JSON-type van de taal. Geneste objecten krijgen een eigen benoemd type – orders wordt Order, addresses wordt Address – en identieke vormen worden één keer gegenereerd en hergebruikt. Objecten met getallen, UUID's of datums als sleutels worden omgezet in maps.

Veldnamen worden aangepast aan de conventie van elke taal, en JSON-sleutels die afwijken, zoals first-name of class, worden teruggekoppeld met de juiste annotatie, alias of CodingKeys. Opmerkingen en losse komma's aan het eind in het voorbeeld worden getolereerd.

De uitvoer beschrijft de voorbeelden die je aanlevert; de generator kan niets weten over velden of waarden die niet in je voorbeelden zitten. Controleer het resultaat dus aan de hand van je API-documentatie voordat je erop vertrouwt.

Privacy

Voorbeelden worden verwerkt en de code wordt gegenereerd door een Web Worker in dit tabblad, dus API-responses met persoonlijke of interne gegevens worden nooit geüpload. De taal- en naamopties worden opgeslagen in de lokale opslag; de JSON die je plakt wordt niet bewaard.

Functies

Voegt veel voorbeelden samen

Ontbrekende sleutels worden optioneel en null-waarden nullable, over alle voorbeelden die je plakt.

9 talen

TypeScript, Zod, Go, Python, Java, C#, Kotlin, Swift en Rust met naamgeving die bij de taal past.

Sleutelkoppeling inbegrepen

json-tags, aliassen, @SerialName, @JsonProperty en CodingKeys behouden de oorspronkelijke JSON-namen.

JSON naar types: veelgestelde vragen

Hoe bepaalt de generator welke velden optioneel zijn?
Een veld is optioneel als minstens één van de objecten op die plek de sleutel niet bevat. Plak je één object, dan is elk veld verplicht, omdat niets anders aantoont. Plak meerdere echte responses of een array van records, zodat de generator ziet welke sleutels komen en gaan. Alle velden optioneel maken is bedoeld voor gedeeltelijke of patch-payloads.
Wat gebeurt er als een waarde soms null is?
Het veld wordt nullable: string | null in TypeScript, een pointer in Go, str | None in Python, String? in Kotlin en Swift, Option<String> in Rust en een boxed of nullable type in Java en C#. Een veld dat in elk voorbeeld null is, heeft geen type om af te leiden en wordt daarom het onbekende of dynamische JSON-type van de taal.
Waarom zijn mijn gehele getallen floats geworden?
Heeft één voorbeeld 7 en een ander 7.5 voor hetzelfde veld, dan moet het type beide kunnen bevatten en wordt het een float of double. Getallen met een decimaalteken, zoals 10.0, tellen ook als decimaal. In TypeScript zijn beide number; met Zod wordt een veld met alleen gehele getallen gecontroleerd met z.number().int().
Is dit hetzelfde als quicktype?
Het lost hetzelfde probleem op met een eigen generator, die volledig in je browser draait en een paar dingen toevoegt: drie Python-stijlen waaronder TypedDict, Zod-schema's en het samenvoegen van meerdere geplakte documenten. quicktype ondersteunt meer talen en kan JSON Schema lezen. Voor de negen talen hier is de uitvoer ontworpen om te compileren zonder extra runtime-hulpmiddelen.
Kan de generator datums, enums of UUID's herkennen?
Nee. Strings blijven strings, want een handvol voorbeelden bewijst niet dat elke toekomstige waarde een datum of onderdeel van een vaste set is. Pas het gegenereerde type zelf aan naar Date, time.Time, datetime, een enum of een UUID-type waar je API dat garandeert. Objecten met UUID's, getallen of datums als sleutels zijn de uitzondering: die worden maps.