Wie kann ich das JSON-Marshalling für Zeitfelder in Golang anpassen?

Barbara Streisand
Freigeben: 2024-11-02 20:47:30
Original
985 Leute haben es durchsucht

How to Customize JSON Marshaling for Time Fields in Golang?

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

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

Ersetzen Sie jetzt time.Time durch CustomTime in der Personenstruktur:

<code class="go">type Person struct {
    age  int
    name string
    dob  CustomTime
}</code>
Nach dem Login kopieren

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

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!

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