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.
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
}
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 :
jt := jsonTime{time.Now(), time.Kitchen}
x := map[string]interface{}{
"foo": jt,
"bar": "baz",
}
data, err := json.Marshal(x)
if err != nil {
panic(err)
}
Dadurch wird eine JSON-Zeichenfolge mit dem Startzeitfeld erzeugt, das entsprechend dem time.Kitchen-Layout formatiert ist.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3