Heim >Backend-Entwicklung >Golang >Wie lassen sich Nullwert-Zeitfelder beim JSON-Marshalling ordnungsgemäß weglassen?

Wie lassen sich Nullwert-Zeitfelder beim JSON-Marshalling ordnungsgemäß weglassen?

DDD
DDDOriginal
2024-12-27 12:19:10355Durchsuche

How to Properly Omit Zero-Value Time Fields in JSON Marshaling?

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!

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