Nouplo

JSON zu Typen

Ein Beispiel hinein, ein Typ heraus.

Beispiele ersetzen vorübergehend Eingabe und Einstellungen. Du kannst deine vorherige Arbeit wiederherstellen.

0 Zeichen
Ergebnis
Oben einfügen oder tippen, das Ergebnis erscheint hier.

Ihre Dateien bleiben auf Ihrem Gerät

Dieses Tool läuft vollständig in Ihrem Browser. Was Sie einfügen, wird auf Ihrem Gerät verarbeitet und nie an einen Server gesendet. Es ist daher auch für Tokens, Schlüssel und unveröffentlichte Texte sicher.

Beispiel

Beispiel: eine Abfahrtstafel als JSON zu Go-Structs – Verspätung mal Zahl, mal null

Für eine kleine Abfahrtsanzeige im Büroflur liest ein Go-Programm die Abfahrten eines Bahnhofs. Eingefügt wird eine Antwort für Musterstadt Hbf mit zwei Abfahrten: RE 7 nach Neustadt um 07:14 auf Gleis 4, 3 Minuten verspätet, und S 2 zum Flughafen um 07:20 auf Gleis 1a, Verspätung null und ausfall: true. Einstellungen: Go, Name Abfahrtstafel, Einrückung 2 Leerzeichen.

  1. Go wird mit Tabulator eingerückt, wie gofmt es will: die Einstellung 2 Leerzeichen wird dafür zu einem Tab. Mit 4 Leerzeichen bleibt es bei 4.
  2. Die Feldnamen beginnen groß, damit Go sie exportiert: verspaetung_min wird VerspaetungMin, gleis_nr wird GleisNr. Der json-Tag behält den Originalnamen.
  3. verspaetung_min war einmal 3 und einmal null, deshalb *float64: ein Zeiger, der nil sein kann. Ohne Zeiger wäre „keine Angabe“ nicht von 0 Minuten zu unterscheiden.
  4. ausfall steht nur bei der S 2, also bool mit omitempty im Tag. Beide Abfahrten haben dieselben übrigen Felder und teilen sich ein Struct.
Feld In der Antwort Go
bahnhof "Musterstadt Hbf"string
abfahrten 2 Einträge[]*Abfahrten
linie "RE 7", "S 2"string
verspaetung_min 3, null*float64
gleis_nr "4", "1a"string
ausfall nur bei S 2: truebool, omitempty

2 Structs, Abfahrtstafel und Abfahrten. Nacharbeiten lohnt sich: Abfahrten beschreibt eine einzelne Abfahrt, also besser Abfahrt; VerspaetungMin darf *int sein, weil Minuten ganz sind; die Spalten richtet gofmt beim Speichern aus. GleisNr bleibt string, sonst passt 1a nicht hinein.

So funktioniert es

  1. Eine echte Antwort einfügen. Ein tatsächlicher Datensatz ist besser als ein ausgedachter.
  2. TypeScript, Go oder Zod wählen.
  3. Den obersten Typ benennen oder Root stehen lassen.
  4. Das Ergebnis kopieren und durchlesen – aus einem Beispiel geschlossen ist ein erster Entwurf, keine Spezifikation.

Häufige Fragen

Wird jedes Element eines Arrays angesehen oder nur das erste?
Jedes. [{a:1},{a:1,b:2}] macht b optional, statt so zu tun, als gäbe es das Feld nicht – genau der Fehler, der generierte Typen zwei Wochen später lästig macht.
Was geschieht mit null?
Erweitert statt eingeengt. Ein Feld, das einmal null war, ist ein Feld, das null sein kann: in TypeScript wird daraus eine Union, in Go ein Zeiger. Das entspricht fast immer dem, was die API wirklich tut.
Kann ich der Ausgabe trauen?
Als Ausgangspunkt. Ein Beispiel kann nicht sagen, dass ein Feld ein Enum ist, dass eine Zahl ganzzahlig ist oder dass eine Zeichenkette ein Datum ist – lesen und nachschärfen. Es spart das Tippen, nicht das Nachdenken.
Warum wird jede Zahl number bzw. in Go float64 und nie integer?
Weil ein Beispiel nicht beweisen kann, dass eine Zahl immer ganz ist: aus 24 kann morgen 24.5 werden. TypeScript und Zod schreiben number, Go schreibt float64. Ist eine ID oder eine Menge immer ganz, ändern Sie sie in Go zu int oder int64 oder ergänzen in Zod .int().
Was passiert, wenn das JSON mit einem Array beginnt?
Dann beschreibt der Typ ein einzelnes Element und bekommt den Namen, den Sie eingeben. Alle Elemente werden gelesen, ein Feld, das nur in manchen vorkommt, wird also optional. In TypeScript kommt am Ende ein Listentyp dazu, etwa OrderList = Order[].
Wird etwas an einen Server geschickt?
Nein. Es läuft im Browser, was Sie einfügen, bleibt auf Ihrem Rechner.

Verwandte Tools