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.
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
- Füge ein JSON-Objekt oder -Array in den linken Editor ein.
- Lies das erzeugte Struct; der Root-Typ heißt immer AutoGenerated.
- 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.