Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich das Layout von Time.Time-Feldern beim JSON-Marshalling in Go anpassen?

Wie kann ich das Layout von Time.Time-Feldern beim JSON-Marshalling in Go anpassen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-01 05:24:27802Durchsuche

How to Customize the Layout of Time.Time Fields in JSON Marshaling in Go?

So passen Sie das Layout von Time.Time-Feldern beim JSON-Marshalling an

In Go bietet die Funktion „Encoding/JSON Marshal“ eine generische Möglichkeit um Datenstrukturen in das JSON-Format zu kodieren. Beim Marshallen eines time.Time-Felds wird normalerweise ein Standardlayout verwendet. Es kann jedoch Szenarien geben, in denen Sie das für die Zeitformatierung verwendete Layout anpassen müssen.

Betrachten Sie das folgende Beispiel:

<code class="go">s := {"starttime":time.Now(), "name":"ali"}</code>

Um s mit Marshal in JSON zu kodieren, würden Sie normalerweise anrufen :

<code class="go">json.Marshal(s)</code>

Möglicherweise möchten Sie jedoch ein bestimmtes Layout für das Feld „Startzeit“ verwenden. Um dies zu erreichen, können wir den benutzerdefinierten Typ „jsonTime“ nutzen:

<code class="go">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
}</code>

Die jsonTime-Struktur bettet den Typ time.Time ein, um den Zugriff auf seine Methoden aufrechtzuerhalten. Die format()-Methode gibt eine benutzerdefinierte formatierte Zeichenfolgendarstellung des Zeitwerts unter Verwendung der f-Layoutzeichenfolge zurück.

Um das von Marshal verwendete Standardlayout zu überschreiben, können wir die MarshalJSON-Methode für jsonTime implementieren:

<code class="go">func (j jsonTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + j.format() + `"`), nil
}</code>

Dadurch wird sichergestellt, dass das Startzeitfeld in der JSON-Ausgabe gemäß dem angegebenen Layout formatiert wird.

Schließlich können Sie den Typ jsonTime verwenden, um das gewünschte Layout zu erreichen:

<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)
}
fmt.Printf("%s", data)</code>

Durch die Verwendung des jsonTime-Typs und seiner benutzerdefinierten Formatierungsimplementierung können Sie das Layout, das von der Marshal-Funktion von Encoding/json für time.Time-Felder verwendet wird, effektiv steuern.

Das obige ist der detaillierte Inhalt vonWie kann ich das Layout von Time.Time-Feldern beim JSON-Marshalling in Go 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