Heim >Backend-Entwicklung >Golang >Wie lassen sich Nullwert-Zeitfelder beim JSON-Marshalling ordnungsgemäß weglassen?
Anpassen des JSON-Marshallings für Zeitfelder mit Auslassungs-Tag
Eine der Herausforderungen bei der Verwendung von JSON mit Zeitfeldern besteht darin, sicherzustellen, dass diese weggelassen werden, wenn nicht eingestellt. Trotz der Verwendung des Tags „json:“,omitempty“ kann es sein, dass das gewünschte Ergebnis des Ausschließens von time.Time-Feldern mit einem Nullwert nicht auftritt.
Um dieses Verhalten zu verstehen, ist es wichtig, den Wert „Null“ zu erkennen für Strukturen unterscheidet sich von dem anderer Datentypen. Bei Strukturen stellt ein Nullwert eine gültige Strukturinstanz dar, in der alle Felder ihre jeweiligen Nullwerte enthalten, wodurch er sich von leeren Werten unterscheidet.
Eine Lösung für diese Herausforderung liegt in der Konvertierung von time.Time-Feldern in Zeiger. Null-Zeiger werden beim JSON-Marshalling und Unmarshaling von Natur aus als „leer“ behandelt, wodurch das Problem des Weglassens von Nullwert-Zeitfeldern umgangen wird.
type MyStruct struct { Timestamp *time.Time `json:",omitempty"` Date *time.Time `json:",omitempty"` Field string `json:",omitempty"` }
Durch die Verwendung von Zeigern für Zeitfelder können wir effektiv das gewünschte Ergebnis erzielen:
ts := time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC) ms := MyStruct{ Timestamp: &ts, Field: "", }
Diese Lösung erzeugt den gewünschten JSON Ausgabe:
{"Timestamp":"2015-09-18T00:00:00Z"}
Alternativ, wenn die Änderung der Struktur zur Verwendung von Zeigern unerwünscht ist, bietet die Implementierung benutzerdefinierter Marshaler- und Unmarshaler-Schnittstellen eine Möglichkeit, das Verhalten des JSON-Marshallings und Unmarshalings für time.Time-Felder anzupassen. Die Verwendung der Time.IsZero()-Methode ermöglicht eine präzise Kontrolle darüber, ob time.Time-Felder basierend auf ihrem Nullwert ausgeschlossen werden sollen.
Das obige ist der detaillierte Inhalt vonWie lassen sich Nullwert-Zeitfelder beim JSON-Marshalling ordnungsgemäß weglassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!