Unmarshal Falsch formatierte Datetime
Beim Unmarshaling von JSON-Datetimes in Go tritt ein häufiges Problem auf, wenn der im JSON angegebene Zeitzonenoffset falsch formatiert ist . Das erwartete Format gemäß RFC3339 ist 02:00 mit einem Doppelpunkt, einige Quellen geben es jedoch möglicherweise als 0200 ohne Doppelpunkt aus.
Benutzerdefinierte Unmarshaling-Lösung
An Um diese Diskrepanz zu bewältigen, kann ein benutzerdefinierter Zeitfeldtyp definiert werden, der beide Formate unterstützt:
type MyTime struct {
time.Time
}
func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
s := string(b)
s = s[1:len(s)-1] // Remove the quotes
t, err := time.Parse(time.RFC3339Nano, s)
if err != nil {
t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
}
self.Time = t
return
}
Diese Lösung nutzt die UnmarshalJSON-Methode, um zunächst die Anführungszeichen aus der JSON-Zeichenfolge zu entfernen. Anschließend wird versucht, die Datums- und Uhrzeitangaben im Standardformat RFC3339Nano zu analysieren. Wenn dies fehlschlägt, wird auf das Parsen eines geänderten Formats zurückgegriffen, das den Doppelpunkt aus dem Zeitzonenoffset entfernt.
Strukturintegration
Um diesen Typ in eine Struktur zu integrieren, definieren Sie es als:
type Test struct {
Time MyTime `json:"time"`
}
Dadurch kann JSON in eine Teststruktur entmarshaled werden, wobei das Zeitfeld mit dem korrekten Datum und der korrekten Uhrzeit gefüllt wird, unabhängig davon, ob der Zeitzonenversatz durch Doppelpunkte getrennt ist oder nicht.
Hinweis zum Zeitformat
Die Verwendung des Jahres 2006 in den Zeitformatzeichenfolgen ist ein historisches Artefakt aus der ersten Veröffentlichung von Go. Es hat keine praktische Bedeutung und hat keinen Einfluss auf die Richtigkeit oder Formatierung von Datumsangaben.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3