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
Freigeben: 2024-12-21 15:46:10
Original
840 Leute haben es durchsucht

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)
}
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage