Zum Inhalt springen

JSON in Go-Strukturen umwandeln

Erzeugt Go-Struct-Definitionen aus JSON mit einer Portierung von json-to-go, formatiert mit gofmt. Schlüssel werden zu exportierten CamelCase-Feldern mit json:"..."-Tags; verschachtelte Objekte werden zu anonymen Inline-Structs und null wird zu any.

Ein Struct schreiben, um die REST-API-Antwort eines Drittanbieters mit json.Unmarshal einzulesen.

JSON

Wann sie hilft

  • Ein Struct schreiben, um die REST-API-Antwort eines Drittanbieters mit json.Unmarshal einzulesen.
  • Request- und Response-Typen für einen Go-HTTP-Handler aus Beispiel-Payloads aufsetzen.

Anwendung

  1. Füge ein JSON-Objekt oder -Array in den linken Editor ein.
  2. Lies das erzeugte Struct; der Root-Typ heißt immer AutoGenerated.
  3. Kopiere es in dein Package, benenne den Typ um und lagere Inline-Structs in benannte Typen aus, wenn du sie wiederverwendest.

JSON

{
  "id": 42,
  "user_name": "ada",
  "score": 9.5,
  "active": true,
  "deleted_at": null,
  "tags": ["go", "json"],
  "address": { "city": "Tokyo", "zip": "100-0001" }
}

Go-Struct

type AutoGenerated struct {
	ID        int      `json:"id"`
	UserName  string   `json:"user_name"`
	Score     float64  `json:"score"`
	Active    bool     `json:"active"`
	DeletedAt any      `json:"deleted_at"`
	Tags      []string `json:"tags"`
	Address   struct {
		City string `json:"city"`
		Zip  string `json:"zip"`
	} `json:"address"`
}

Details und Einschränkungen

Die Erzeugung läuft im Browser. Es gibt keine Einstellungen für den Typnamen, Inline- oder benannte Structs oder Tags.

Initialwörter werden großgeschrieben (id wird zu ID) und snake_case wird zu CamelCase, wobei der ursprüngliche Schlüssel im json-Tag erhalten bleibt.

Ganze Zahlen werden zu int (int64 bei großen Werten), Dezimalzahlen zu float64. null, leere Arrays und gemischte Arrays werden zu any oder []any.

Unterscheiden sich die Objekte in einem Array, erhalten Schlüssel, die in einigen fehlen, ,omitempty.

FAQ

Kann ich ein JSON-Array auf oberster Ebene umwandeln?

Ja. Es entsteht type AutoGenerated []struct{...}, wobei die Felder aller Objekte im Array zusammengeführt werden.

Warum ist mein null-Feld als any typisiert?

Ein null-Wert trägt keine Typinformation. Ersetze any durch einen Pointer wie *string oder *time.Time, um nil weiterhin zu unterstützen.

Werden benannte verschachtelte Structs erzeugt?

Nein. Verschachtelte Objekte sind anonyme Inline-Structs. Verschiebe sie manuell in benannte Typen, wenn du auf sie verweisen musst.

Spezifikationen und Referenzen