Anpassen des JSON-Marshallings für Zeitfelder mit Override in Golang
In Go bietet die Marshal-Funktion von Encoding/JSON eine unkomplizierte Möglichkeit, Datenstrukturen zu konvertieren in JSON. Es wird jedoch ein Standardlayout für time.Time-Felder verwendet. In diesem Artikel wird erläutert, wie Sie dieses Layout überschreiben können, um ein benutzerdefiniertes Format zu verwenden.
Beachten Sie die folgende Struktur:
<code class="go">type Person struct { age int name string dob time.Time }</code>
Standardmäßig wird durch das Marshaling dieser Struktur das Feld „dob“ in das RFC3339-Layout konvertiert ist möglicherweise nicht immer erwünscht.
Um das Standardlayout zu überschreiben, können wir einen benutzerdefinierten Typ verwenden, der time.Time einbettet und MarshalJSON implementiert:
<code class="go">type CustomTime struct { time.Time } func (t CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + t.Format("my_custom_layout") + `"`), nil }</code>
Ersetzen Sie jetzt time.Time durch CustomTime in der Personenstruktur:
<code class="go">type Person struct { age int name string dob CustomTime }</code>
Beim Marshalling dieser geänderten Personenstruktur wird das benutzerdefinierte Layout auf das DoB-Feld angewendet.
Beispiel:
<code class="go">package main import ( "encoding/json" "fmt" "time" ) type Person struct { age int name string dob CustomTime } func main() { dob := time.Now() p := Person{25, "John Doe", CustomTime{dob}} jsonBytes, err := json.Marshal(p) if err != nil { fmt.Println(err) return } fmt.Println(string(jsonBytes)) }</code>
Ausgabe: {"age":25,"name":John Doe",dob":2023-03-08T14:41:21 00:00"}
In diesem Das benutzerdefinierte Layout ist beispielsweise „my_custom_layout“, das in der Person-Struktur nicht vorhanden ist. Stattdessen haben wir es direkt in der MarshalJSON-Methode von CustomTime angegeben.
Mit dieser Anpassung können Sie das Layout von time.Time-Feldern steuern, wenn Sie die Marshal-Funktion verwenden, was Flexibilität und Kontrolle über die JSON-Darstellung bietet.
Das obige ist der detaillierte Inhalt vonWie kann ich das JSON-Marshalling für Zeitfelder in Golang anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!