JSON omitempty with time.Time Field
In Go können Sie mit der Annotation „json,omitempty“ Felder mit leeren Werten aus JSON ausschließen Serialisierung funktioniert jedoch nicht mit time.Time-Feldern, da diese einen Nullwert haben, der als gültig gilt Datum.
Um dieses Problem zu beheben, setzen Sie das Feld time.Time auf time.Time{}, anstatt es auf einem Nullwert zu belassen. Dadurch wird der JSON-Encoder angewiesen, das Feld als leer zu behandeln.
Betrachten Sie das folgende Beispiel:
package main import ( "encoding/json" "fmt" "time" ) type MyStruct struct { Timestamp time.Time `json:",omitempty"` Date time.Time `json:",omitempty"` Field string `json:",omitempty"` } func main() { ms := MyStruct{ Timestamp: time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC), Date: time.Time{}, Field: "", } bb, err := json.Marshal(ms) if err != nil { panic(err) } fmt.Println(string(bb)) }
Ausgabe:
{"Timestamp":"2015-09-18T00:00:00Z"}
Alternativ können Sie einen Zeiger verwenden auf time.Time und setzen Sie es auf Null, um den gleichen Effekt zu erzielen:
type MyStruct struct { Timestamp *time.Time `json:",omitempty"` Date *time.Time `json:",omitempty"` Field string `json:",omitempty"` }
Das obige ist der detaillierte Inhalt vonWie gehe ich mit „json:'omitempty'' mit „time.Time'-Feldern in Go um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!