Falsch formatierte Datums- und Uhrzeitangaben entmarshalieren
Beim Entmarshalieren von JSON-Datums- und Uhrzeitangaben in Go tritt ein häufiges Problem auf, wenn der im JSON angegebene Zeitzonenversatz 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:
<code class="go">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 }</code>
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 Zeitzonen-Offset entfernt.
Strukturintegration
Um diesen Typ in eine Struktur zu integrieren, definieren Sie es als:
<code class="go">type Test struct { Time MyTime `json:"time"` }</code>
Dadurch kann JSON in eine Teststruktur entmarshaled werden, wobei das Zeitfeld mit dem richtigen Datum und der richtigen 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.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich falsch formatierte Datumsangaben in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!