Um JSON mit nicht standardmäßigen Zeitformaten in benutzerdefinierte Strukturen zu dekodieren, bieten integrierte Marshal- und Unmarshal-Funktionen Flexibilität.
Berücksichtigen Sie den folgenden JSON:
{ "name": "John", "birth_date": "1996-10-07" }
Und eine benutzerdefinierte Struktur zum Speichern der Daten:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
Die Dekodierung dieses JSON mit dem Standarddecoder schlägt aufgrund der Nicht-Funktion fehl -Standardzeitformat. Um dies zu bewältigen, implementieren Sie benutzerdefinierte Marshall- und Unmarshal-Funktionen:
type JsonBirthDate time.Time 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 } func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
Durch Hinzufügen von JsonBirthDate zur Person-Struktur und Implementieren dieser Funktionen dekodiert der folgende Code den JSON korrekt:
person := Person{} decoder := json.NewDecoder(req.Body) err := decoder.Decode(&person) if err != nil { log.Println(err) } // person.BirthDate now contains the parsed time as a time.Time object
Das obige ist der detaillierte Inhalt vonWie dekodiere ich JSON mit nicht standardmäßigen Zeitformaten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!