Benutzerdefiniertes Un/Marshaling für nicht standardmäßige JSON-Zeitformate
Beim Umgang mit JSON-Daten, die Zeitwerte in nicht standardmäßigen Formaten enthalten, Beim integrierten JSON-Decoder können Fehler auftreten. Um solche Situationen zu bewältigen, können benutzerdefinierte Marshall- und Unmarshal-Funktionen implementiert werden.
Berücksichtigen Sie den folgenden JSON:
{ "name": "John", "birth_date": "1996-10-07" }
Und die gewünschte Go-Struktur:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
Using Der Standard-JSON-Decoder würde beim Parsen des Felds „birth_date“ zu einem Fehler führen. Um dieses Verhalten anzupassen, kann ein Typalias erstellt und der Struktur hinzugefügt werden:
type JsonBirthDate time.Time
Dann werden benutzerdefinierte Marshall- und Unmarshal-Funktionen implementiert:
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) // Remove quotes t, err := time.Parse("2006-01-02", s) if err != nil { return err } *j = JsonBirthDate(t) return nil } func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
Mit diesen benutzerdefinierten Funktionen Der JSON kann nun wie vorgesehen in die Go-Struktur dekodiert werden:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) } // Print the birth date using the Format function fmt.Println(person.BirthDate.Format("2006-01-02"))
Das obige ist der detaillierte Inhalt vonWie kann ich nicht standardmäßige JSON-Zeitformate in Go benutzerdefiniert entmarshalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!