Wie kann ich das JSON-Marshalling für „time.Time' in Go anpassen?

Mary-Kate Olsen
Freigeben: 2024-11-02 03:09:30
Original
804 Leute haben es durchsucht

How can I customize JSON marshaling for `time.Time` in Go?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!