Es wird eine Struktur mit verschachtelten Strukturen angegeben, und das Ziel besteht darin, das JSON-Tag von dynamisch zu ändern ein bestimmtes Feld innerhalb der Struktur vor der JSON-Codierung. Die gewünschte JSON-Ausgabe besteht darin, einen bestimmten Feldnamen zu überschreiben.
Verwendung einer anonymen Struktur in MarshalJSON
In Go-Versionen 1.8 und höher kann eine Technik eingesetzt werden, um das JSON-Tag eines Felds zur Laufzeit dynamisch zu ändern. Dazu gehört das Erstellen einer anonymen Struktur mit den gewünschten Feld-Tags innerhalb der MarshalJSON-Methode der ursprünglichen Struktur.
func (u *User) MarshalJSON() ([]byte, error) { type alias struct { ID int64 `json:"id"` Name string `json:"name"` // The modified JSON tag tag string `json:"-"` Another } var a alias = alias(*u) return json.Marshal(&a) }
Hier hat die Alias-Struktur dieselben Felder wie die Benutzerstruktur, aber das Feld „Name“ enthält die gewünschten JSON-Tag („name“ statt „first“). Durch die Rückgabe der JSON-Codierung der Alias-Struktur kann der JSON-Feldname dynamisch überschrieben werden.
Um über alle Felder einer Struktur, einschließlich eingebetteter Strukturen, zu iterieren, verwenden Sie die reflektieren Sie das Paket wie folgt:
value := reflect.ValueOf(*u) for i := 0; i < value.NumField(); i++ { tag := value.Type().Field(i).Tag.Get("json") field := value.Field(i) fmt.Println(tag, field) }
Dieser Code durchläuft alle Felder, einschließlich der in der eingebetteten Another-Struktur, und Drucken Sie das JSON-Tag und den Feldwert für jedes Feld aus.
Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Tags in Go-Strukturen zur Laufzeit dynamisch ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!