Heim > Backend-Entwicklung > Golang > Wie verwende ich mehrere JSON-Tags für ein einzelnes Strukturfeld in Go?

Wie verwende ich mehrere JSON-Tags für ein einzelnes Strukturfeld in Go?

Mary-Kate Olsen
Freigeben: 2024-12-17 03:25:25
Original
419 Leute haben es durchsucht

How to Use Multiple JSON Tags for a Single Struct Field in Go?

Mehrere JSON-Tags für Strukturfelder

In einem Szenario, in dem Sie JSON-Daten von einem Server erhalten und diese in eine Struktur entmarshalieren müssen, Möglicherweise stoßen Sie auf Situationen, in denen Sie dieselben Daten mit unterschiedlichen JSON-Tags für unterschiedliche Zwecke darstellen möchten.

Anpassen JSON-Tags

Das JSON-Tag gibt den Feldnamen an, der in der JSON-Darstellung verwendet wird. Standardmäßig ist das Tag eines Feldes dasselbe wie der Feldname. Sie können die Tags jedoch anpassen, um die Namen zu ändern, die beim Serialisieren oder Deserialisieren der Struktur verwendet werden.

Einzelnes JSON-Tag

Die Verwendung eines einzelnen JSON-Tags ist unkompliziert. Geben Sie einfach das gewünschte Tag als String-Literal an:

type Foo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
Nach dem Login kopieren

Mehrere JSON-Tags

Wie in der Frage erwähnt, ist es nicht möglich, mehrere JSON-Tags direkt anzuhängen ein einzelnes Feld. Es gibt jedoch eine Technik, mit der Sie diese Einschränkung umgehen können.

Struct Casting

Die angegebene Lösung schlägt die Verwendung von zwei Strukturen vor, die das gleiche Feldlayout haben. Zum Beispiel:

type Foo struct {
    Name string
    Age  int
}

type Bar struct {
    Name string `json:"employee_name"`
    Age  int    `json:"-"`
}
Nach dem Login kopieren

Dann können Sie die Foo-Struktur in eine Bar-Struktur umwandeln, um die JSON-Tags zu ändern. Diese Technik ist besonders nützlich, wenn Sie eine große Anzahl von Feldern haben:

foo := Foo{Name: "Sam", Age: 20}
bar := (*Bar)(unsafe.Pointer(&foo))
Nach dem Login kopieren

Vorsicht

Es ist wichtig zu beachten, dass die zweite Struktur nicht exportiert werden sollte, um dies zu verhindern vor dem Zugriff außerhalb Ihres aktuellen Pakets. Dadurch wird sichergestellt, dass der Guss nur bestimmungsgemäß durchgeführt und nicht versehentlich missbraucht wird.

Beispiel

Der folgende Code demonstriert die oben erwähnte Gusstechnik:

package main

import (
    "encoding/json"
    "fmt"
)

type Foo struct {
    Name string
    Age  int
}

type Bar struct {
    Name string `json:"employee_name"`
    Age  int    `json:"-"`
}

func main() {
    foo := Foo{Name: "Sam", Age: 20}
    bar := (*Bar)(unsafe.Pointer(&foo))

    jsonBytes, err := json.Marshal(bar)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(string(jsonBytes))
}
Nach dem Login kopieren

Dieser Code serialisiert die Foo-Strukturdaten erfolgreich mithilfe der in der Bar-Struktur definierten JSON-Tags. Es erzeugt die folgende JSON-Ausgabe:

{"employee_name":"Sam"}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie verwende ich mehrere JSON-Tags für ein einzelnes Strukturfeld in Go?. 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