Struktur mit mehreren JSON-Tags
In einem Szenario, in dem eine JSON-Antwort von einem Server empfangen wird und in eine Struktur entmarshaled werden muss, Möglicherweise müssen die JSON-Tags geändert werden, bevor sie an einen anderen Server gesendet werden. Normalerweise würde dies das Erstellen einer neuen Struktur und das manuelle Kopieren von Daten beinhalten.
Es lohnt sich jedoch zu überlegen, ob es möglich ist, mehrere JSON-Tags für eine einzelne Struktur zu definieren. Der Versuch, mehrere Tags direkt in der Strukturdefinition an dasselbe Feld anzuhängen, wie im Beispiel unten, wird nicht unterstützt:
type Foo struct { Name string `json:"name" json:"employee_name"` Age int `json:"age" json:"-"` }
Stattdessen besteht eine mögliche Lösung im Casting zwischen zwei identisch angelegten Strukturen (Matching). Namen, Typen und Feldreihenfolge). Obwohl von diesem Ansatz im Allgemeinen abgeraten wird, kann er mit Vorsicht angewendet werden, um das gewünschte Ergebnis zu erzielen.
type Foo struct { Name string `json:"name"` Age int `json:"age"` } type Bar struct { Name string `json:"employee_name"` // Age is not exported age int `json:"-"` } func main() { foo := Foo{} // Unmarshal JSON err := json.Unmarshal([]byte("{\"name\":\"Sam\",\"age\":20}"), &foo) if err != nil { log.Fatal(err) } // Cast between types, overwriting internal representation bar := (*Bar)(unsafe.Pointer(&foo)) // Marshal modified JSON data, err := json.Marshal(bar) if err != nil { log.Fatal(err) } // Example JSON: {"employee_name":"Sam"} fmt.Println(string(data)) }
Es ist wichtig zu beachten, dass dieser Casting-Ansatz mit Bedacht eingesetzt werden sollte. Die zweite Struktur sollte nicht exportiert werden, um eine unbeabsichtigte Verwendung außerhalb des spezifischen Kontexts zu verhindern.
Das obige ist der detaillierte Inhalt vonKönnen mehrere JSON-Tags für ein einzelnes Go-Struct-Feld definiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!