Heim > Artikel > Backend-Entwicklung > Wie kann ich das Layout von Time.Time-Feldern beim JSON-Marshalling in Go anpassen?
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!