Heim >Backend-Entwicklung >Golang >Wie kann ich das JSON-Marshalling für Zeitfelder in Golang anpassen?

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

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 20:47:30994Durchsuche

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>

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>

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

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

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>

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!

Stellungnahme:
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