Heim >Backend-Entwicklung >Golang >Können mehrere JSON-Tags für ein einzelnes Go-Struct-Feld definiert werden?

Können mehrere JSON-Tags für ein einzelnes Go-Struct-Feld definiert werden?

Susan Sarandon
Susan SarandonOriginal
2024-12-24 14:27:18728Durchsuche

Can Multiple JSON Tags Be Defined for a Single Go Struct Field?

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!

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