Parsen eines nicht standardmäßigen Zeitformats aus JSON
Beim Dekodieren von JSON-Daten in eine benutzerdefinierte Struktur können Inkonsistenzen in den Datumsformaten auftreten. Um dies zu beheben, bietet Golang die Möglichkeit, benutzerdefinierte Marshal- und Unmarshal-Funktionen zu implementieren.
Benutzerdefinierte Marshaler- und Unmarshaler-Funktionen
Um ein benutzerdefiniertes Parsing-Format anzugeben, ist ein Typalias für das Zeitfeld erstellt und die Marshaler- und Unmarshaler-Schnittstellen werden wie folgt implementiert:
type JsonBirthDate time.Time // UnmarshalJSON translates a JSON string to a time value. func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) t, err := time.Parse("2006-01-02", s) if err != nil { return err } *j = JsonBirthDate(t) return nil } // MarshalJSON converts a time value to a JSON string. func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
Diese benutzerdefinierte Logik prüft, ob der JSON-Wert im gewünschten Format vorliegt und analysiert ihn entsprechend.
Aktualisierte Struktur und Analyse
Die Struktur ist aktualisiert, um den benutzerdefinierten Typ zu verwenden, und die Dekodierung kann wie gewohnt erfolgen:
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` } decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
Zusätzliche Funktionen
Der Einfachheit halber kann eine Format-Methode hinzugefügt werden, um eine formatierte Darstellung des Datums bereitzustellen:
// Format prints the date using the specified format string. func (j JsonBirthDate) Format(s string) string { t := time.Time(j) return t.Format(s) }
Dieser benutzerdefinierte Marshalling- und Unmarshaling-Ansatz ermöglicht eine flexible Analyse von Zeitwerten aus JSON, selbst wenn diese von Standardformaten abweichen.
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