Marshalling und Unmarshalling mit mehreren JSON-Tags
Beim Unmarshalling von JSON-Daten in eine Struktur muss jedes Feld über ein entsprechendes JSON-Tag verfügen, um es anzugeben entsprechenden JSON-Schlüssel. Manchmal müssen Sie jedoch möglicherweise eine neue JSON-Datei mit denselben Daten, aber unterschiedlichen JSON-Tags erstellen.
In Ihrem Fall möchten Sie die JSON-Datei {"name": "Sam", "age" entmarshalieren: 20} in die Struktur Foo ein und erstellen Sie dann eine modifizierte Version mit den Tags „Mitarbeitername“ und „-“, um sie an einen anderen Server zu senden.
Während es praktisch wäre, einem einzelnen Feld mehrere JSON-Tags zuzuweisen, wie Sie möchten vorgeschlagen, wird dies im Paket „encoding/json“ in Go nicht unterstützt. Stattdessen können Sie das gewünschte Ergebnis erzielen, indem Sie nicht exportierte Typen verwenden und umwandeln.
package main import ( "bytes" "encoding/json" ) type Foo struct { Name string `json:"name"` Age int `json:"age"` } func main() { data := []byte(`{"name":"Sam","age":20}`) // Unmarshal to Foo var foo Foo json.Unmarshal(data, &foo) // Create a new type with modified tags type Bar struct { Name string `json:"employee_name"` Age int `json:"-"` } // Cast from Foo to Bar bar := Bar(foo) // Marshal Bar buf := new(bytes.Buffer) json.NewEncoder(buf).Encode(bar) println(buf.String()) }
Hinweis: Dieser Ansatz basiert auf der nicht exportierten Typleiste. Die Verwendung nicht exportierter Typen trägt dazu bei, eine versehentliche Verwendung an anderer Stelle in der Codebasis zu verhindern. Stellen Sie außerdem sicher, dass die Feldnamen, -typen und die Reihenfolge in beiden Strukturen genau übereinstimmen, damit das Casting ordnungsgemäß funktioniert.
Das obige ist der detaillierte Inhalt vonWie kann ich JSON mit einem Tag-Satz entmarshalieren und mit einem anderen in Go marshalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!