In Golang wird die Funktion „encoding/json.Marshal“ häufig zum Konvertieren von Objekten in JSON verwendet. Unter den Standardeinstellungen stimmt es jedoch möglicherweise nicht mit dem gewünschten JSON-Layout überein. Dieser Artikel veranschaulicht eine Lösung zum Überschreiben des Standardlayouts und zum Anpassen des Formats, das von time.Time-Feldern während des JSON-Marshallings verwendet wird.
Angenommen, Sie haben eine Struktur s mit einem time.Time-Feld namens starttime. Beim Marshallen dieser Struktur in JSON möchten Sie ein bestimmtes benutzerdefiniertes Layout verwenden.
s := {"starttime":time.Now(), "name":"ali"}
Um dies zu erreichen, können wir einen benutzerdefinierten Typ erstellen, der time.Time einbettet und sowohl die MarshalText- als auch die MarshalJSON-Methode überschreibt.
<code class="go">import "fmt" import "time" import "encoding/json" type jsonTime struct { time.Time f string } func (j jsonTime) format() string { return j.Time.Format(j.f) } func (j jsonTime) MarshalText() ([]byte, error) { return []byte(j.format()), nil } func (j jsonTime) MarshalJSON() ([]byte, error) { return []byte(`"` + j.format() + `"`), nil }</code>
Durch das Überschreiben von MarshalText steuern wir, wie der jsonTime-Typ seinen Wert in eine Textform umwandelt, sodass wir das benutzerdefinierte Layout angeben können. Darüber hinaus stellen wir durch das Überschreiben von MarshalJSON sicher, dass die überschriebene Methode anstelle der integrierten time.Time-Implementierung für das JSON-Marshalling verwendet wird.
Mit dem benutzerdefinierten jsonTime-Typ können Sie jetzt Ihre S-Struktur mit dem gewünschten Layout Marshallen :
<code class="go">jt := jsonTime{time.Now(), time.Kitchen} x := map[string]interface{}{ "foo": jt, "bar": "baz", } data, err := json.Marshal(x) if err != nil { panic(err) }</code>
Dadurch wird eine JSON-Zeichenfolge mit dem Startzeitfeld erzeugt, das entsprechend dem time.Kitchen-Layout formatiert ist.
Das obige ist der detaillierte Inhalt vonWie passt man das JSON-Layout für time.Time-Felder in Golang an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!