Heim >Backend-Entwicklung >Golang >Wie kann ich JSON-Tags in Go-Strukturen zur Laufzeit dynamisch ändern?

Wie kann ich JSON-Tags in Go-Strukturen zur Laufzeit dynamisch ändern?

Barbara Streisand
Barbara StreisandOriginal
2024-12-21 15:46:10841Durchsuche

How Can I Dynamically Change JSON Tags in Go Structs at Runtime?

JSON-Tags in Strukturen dynamisch ändern

Problem

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.

Lösung

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.

Iterieren über alle Felder

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn