Heim > Backend-Entwicklung > Golang > 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
Freigeben: 2024-11-01 05:24:27
Original
899 Leute haben es durchsucht

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

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

<code class="go">json.Marshal(s)</code>
Nach dem Login kopieren

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

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

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

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!

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