Unmarshalling falsch formatierter Datetime-Felder
Wenn Sie auf JSON mit falsch formatierten Datetime-Feldern stoßen, ist es wichtig, eine robuste Strategie zum Parsen und Unmarshalling dieser Felder zu entwickeln in Go-Strukturen. Das falsche Format beinhaltet typischerweise das Fehlen des Doppelpunkts „:“ im Zeitzonen-Offset, was zu Unmarshalling-Fehlern führt.
Lösung: Benutzerdefinierter Typ und UnmarshalJSON-Methode
An Um dieses Problem zu beheben, kann ein benutzerdefinierter Typ definiert werden, der sowohl das richtige als auch das falsche Format 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] 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>
Beim Unmarshalling Die UnmarshalJSON-Methode dieses Typs wird aufgerufen. Zunächst werden die umgebenden Anführungszeichen aus der JSON-Zeichenfolge entfernt. Anschließend wird versucht, die Datums- und Uhrzeitangabe im Standardformat time.RFC3339Nano zu analysieren. Wenn dies fehlschlägt, wird mit dem Parsen mit dem falschen Format ohne Doppelpunkt begonnen („2006-01-02T15:04:05.999999999Z0700“).
Strukturdefinition
Um diesen benutzerdefinierten Typ innerhalb eines Go zu verwenden Struktur:
<code class="go">type Test struct { Time MyTime `json:"time"` }</code>
Dadurch wird sichergestellt, dass JSON mit korrekten und falschen Datums-/Uhrzeitformaten in derselben Go-Struktur entmarshallt werden kann.
Fazit
Durch die Definition eines benutzerdefinierten Zeitfeldtyps mit einer geeigneten UnmarshalJSON-Methode ist es möglich, falsch formatierte Datums-/Uhrzeitfelder zu analysieren und zu entmarshalieren nahtlos in Go-Programme integrieren. Dies ermöglicht eine größere Flexibilität bei der Handhabung von Eingabedaten und stellt sicher, dass die Go-Strukturdarstellung die Daten unabhängig von ihrem Format genau wiedergibt.
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich falsch formatierte Datums- und Uhrzeitangaben in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!