Werkzeuge
Leitfäden

JSON-zu-Code-Generator

JSON

Erzeugt TypeScript-, Java-, Go- und C#-Typen aus JSON. Erkennt verschachtelte Objekte und Arrays.

100 % clientseitig Ohne Backend

Remote-URLs werden nicht abgerufen; fügen Sie Ihr JSON direkt ein.

JSON
Ausgabe
Auf dieser Seite

Was ist ein JSON-zu-Code-Generator?#

Ein JSON-zu-Code-Generator liest ein JSON-Beieldokument, leitet die Form der Daten ab — welche Felder Strings sind, welche Zahlen, welche verschachtelte Objekte, welche Arrays wovon — und schreibt die Entitäts-Typen, die ein echtes Programm verwenden würde, um diese Daten zu halten. Statt per Hand ein TypeScript-Interface, eine Java-Klasse, ein Go-Struct oder eine C#-Klasse zu schreiben, die zu einer API-Antwort passt, fügen Sie eine Beispielantwort ein und erhalten Typen, die Sie direkt in Ihr Projekt übernehmen können.

Unter der Haube durchwandert es den geparsten Wert und leitet ein Schema ab. Verschachtelte Objekte werden zu eigenen benannten Typen; der Elementtyp eines Arrays ist die Zusammenführung der Form jedes Elements (sodass eine Liste von Objekten, die nicht alle dieselben Schlüssel haben, dennoch einen Typ mit der Vereinigung der Felder erzeugt). Feldnamen, die keine gültigen Bezeichner sind — ein Bindestrich-Schlüssel wie first-name oder einer, der mit einer Ziffer beginnt — werden zu einem legalen Bezeichner bereinigt, und der ursprüngliche Schlüssel wird als Serialisierungs-Annotation bewahrt, sodass ein Round-Trip weiterhin funktioniert.

Die Ausgabe ist reiner Quelltext ohne Laufzeit-Abhängigkeit von dieser Seite. Kopieren Sie ihn, fügen Sie ihn in Ihre Codebasis ein, passen Sie die Typnamen an und Sie haben einen Startpunkt — kein fertiges Modell, aber das langweilige Skelett ist bereits für Sie geschrieben.

Verwendung#

  1. Wählen Sie das Ziel mit der Dropdown-Liste Sprache: TypeScript, Java, Go oder C#.
  2. Setzen Sie den Root-Name (Standard Root). Das wird der Name des äußersten Typs — zum Beispiel User, Order, Response.
  3. Fügen Sie Ihr JSON in die linke Fläche ein. Der erzeugte Code erscheint live rechts; die Statuszeile meldet Fehler (ungültiges JSON, leere Eingabe).
  4. Klicken Sie auf Kopieren, um den Code in die Zwischenablage zu übernehmen.
  5. Beispiel lädt ein verschachteltes Objekt mit einem Teil-Objekt und einem Array; Leeren setzt beide Flächen zurück.

Eckpunkte#

  • Vier Zielsprachen. TypeScript-Interfaces, Java-Klassen, Go-Structs und C#-Klassen — eine Eingabe, vier Ausgaben, umgeschaltet mit einer Dropdown-Liste.
  • Schemainferenz, kein wörtliches Tippen. Verschachtelte Objekte werden zu benannten Typen; Arrays von Objekten erzeugen einen benannten Elementtyp statt einer undurchsichtigen any-Liste.
  • Zusammenführung heterogener Arrays. Wenn Array-Elemente unterschiedliche Felder haben, ist der abgeleitete Typ die Vereinigung — nützlich bei unordentlichen Echtwelt-Antworten, bei denen nicht jedes Item jeden Schlüssel hat.
  • Bezeichnersicher, schlüsselgetreu. Schlüssel, die keine gültigen Bezeichner sind, werden bereinigt, und der ursprüngliche Schlüssel wird als Serialisierungs-Annotation bewahrt (@JsonProperty, ein Go-json:-Tag, JsonPropertyName), sodass das ursprüngliche JSON weiterhin korrekt deserialisiert wird.
  • Live und lokal. Die Erzeugung läuft beim Tippen oder Umschalten der Optionen in Ihrem Browser; die Daten verlassen niemals die Seite.

Konkretes Beispiel#

Laden Sie Beispiel mit Sprache auf TypeScript und Root-Name Root, und die Eingabe ist:

{
  "id": 1,
  "name": "Ada",
  "active": true,
  "address": { "city": "London", "zip": "NW1" },
  "tags": ["math", "logic"]
}

Der Generator gibt zwei Interfaces aus — die Wurzel und einen benannten Typ Address für das verschachtelte Objekt:

export interface Root {
  id: number;
  name: string;
  active: boolean;
  address: Address;
  tags: Array<string>;
}

export interface Address {
  city: string;
  zip: string;
}

Schalten Sie die Sprache auf Go und dieselbe Eingabe wird zu Structs mit json:-Tags, die die ursprünglichen Schlüssel bewahren:

package model

type Root struct {
  Id       float64   `json:"id"`
  Name     string    `json:"name"`
  Active   bool      `json:"active"`
  Address  Address   `json:"address"`
  Tags     []string  `json:"tags"`
}

type Address struct {
  City  string  `json:"city"`
  Zip   string  `json:"zip"`
}

Beachten Sie, wie id, eine JSON-Zahl, in TypeScript als number und in Go als float64 landet — der Generator rät nicht zwischen Ganzzahl und Gleitkommazahl, weil JSON selbst nicht zwischen ihnen unterscheidet.

FAQ#

Warum ist mein Ganzzahl-Feld als float64 / Double / double typisiert?#

Weil JSON einen einzigen Zahlentyp hat und keine Möglichkeit, 5 von 5.0 zu unterscheiden. Der Generator bildet jede JSON-Zahl auf den allgemeinen numerischen Typ der Zielsprache ab — number in TypeScript, Double in Java, float64 in Go, double in C# —, sodass der Typ immer breit genug ist, um zu fassen, was der Wert auch immer sein mag. Wenn Sie wissen, dass ein Feld immer eine Ganzzahl ist, verengen Sie es nachträglich von Hand auf int / Long / int64.

Was passiert, wenn die Objekte meines Arrays nicht alle dieselben Felder haben?#

Ihre Formen werden zusammengeführt. Ein Array wie [{ "a": 1 }, { "a": 2, "b": "x" }] erzeugt einen Elementtyp mit sowohl a als auch b, sodass ein einziger Typ jedes Item abdeckt. Wenn zwei Elemente beim Typ eines Felds in inkompatibler Weise uneinig sind (sagen wir hier eine Zahl, dort ein String), degradiert das Feld zu any / Object, anstatt eine Seite zu wählen und bei der anderen falsch zu liegen.

Ein Feld in meinem JSON enthält einen Bindestrich, etwa first-name. Bricht das?#

Nein. Der Generator wandelt first-name in einen legalen Bezeichner (firstName) für den Feldnamen um und gibt eine Serialisierungs-Annotation aus, die den ursprünglichen Schlüssel festhält — @JsonProperty("first-name") in Java, ein json:"first-name"-Tag in Go, [JsonPropertyName("first-name")] in C# und ein zitierter "first-name"-Schlüssel in TypeScript. Der erzeugte Code deserialisiert daher das ursprüngliche JSON unverändert.

Was macht das mit einem null-Wert?#

Ein Feld, dessen Wert null ist, wird als unbekannter Typ behandelt. In TypeScript wird es zu einem optionalen any (field?: any;); in Java und C# wird es Object / object; in Go interface{}. Das ist ein bewusstes Signal — null sagt Ihnen nichts darüber, was das Feld hält, wenn es vorhanden ist, deshalb verweigert sich der Generator zu raten und überlässt es Ihnen auszufüllen.