Heim > Artikel > Backend-Entwicklung > Wie kann ich das JSON-Marshalling für „time.Time“ in Go anpassen?
Anpassen des JSON-Marshallings für Time.Time
In Go serialisiert die generische Marshal-Funktion aus dem Paket „encoding/json“ time.Time-Werte als Zeichenfolgen im Standardformat ISO 8601. Es ist jedoch möglich, dieses Verhalten anzupassen, indem das für das Zeitmarshalling verwendete Layout überschrieben wird.
Beachten Sie die folgende Struktur:
<code class="go">type MyStruct struct { StartTime time.Time Name string }</code>
Um ein benutzerdefiniertes Zeitlayout beim Marshallen von MyStruct an JSON zu verwenden, Wir können den Typ time.Time in eine benutzerdefinierte Struktur einbetten, die die Methoden MarshalText und MarshalJSON überschreibt. Hier ist ein Beispiel:
<code class="go">import ( "encoding/json" "time" ) type CustomTime struct { time.Time Layout string } func (ct CustomTime) MarshalText() ([]byte, error) { return []byte(ct.Format(ct.Layout)), nil } func (ct CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + ct.Format(ct.Layout) + `"`), nil }</code>
In diesem benutzerdefinierten Typ haben wir time.Time eingebettet und ein zusätzliches Layout-Feld hinzugefügt, um die gewünschte Layout-Zeichenfolge anzugeben. Durch Überschreiben der Methoden MarshalText und MarshalJSON können wir die Formatierung des Zeitfelds steuern.
Um CustomTime mit Ihrer Struktur zu verwenden, ersetzen Sie das Feld time.Time durch ein CustomTime-Feld und initialisieren Sie das Feld Layout mit dem gewünschten Layout Zeichenfolge. Zum Beispiel:
<code class="go">type CustomMyStruct struct { StartTime CustomTime Name string } func main() { s := CustomMyStruct{ StartTime: CustomTime{ Time: time.Now(), Layout: "2006-01-02 15:04:05", }, Name: "ali", } data, err := json.Marshal(s) if err != nil { panic(err) } fmt.Println(string(data)) }</code>
Dieser Code serialisiert die MyStruct-Instanz als JSON unter Verwendung des angegebenen Zeitlayouts.
Das obige ist der detaillierte Inhalt vonWie kann ich das JSON-Marshalling für „time.Time“ in Go anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!