Heim > Artikel > Backend-Entwicklung > Wie dekodiere ich nicht standardmäßige Zeitformate aus JSON?
Dekodierung nicht standardmäßiger Zeitformate aus JSON
Beim Umgang mit JSON-Daten, die nicht standardmäßige Zeitformate enthalten, kann es zu einer Standard-JSON-Dekodierung kommen Probleme, da bestimmte Zeitformatmuster erwartet werden. Um dies zu umgehen, können benutzerdefinierte Marshall- und Unmarshal-Funktionen implementiert werden.
Betrachten Sie beispielsweise den folgenden JSON:
{ "name": "John", "birth_date": "1996-10-07" }
Angenommen, wir möchten dies in eine Personenstruktur dekodieren:
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
Die Verwendung des Standard-JSON-Decoders:
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) }
führt zu einem Fehler, da der Decoder das nicht standardmäßige Zeitformat nicht analysieren kann. Um dies zu beheben, können wir einen benutzerdefinierten Typalias für den Zeitwert erstellen und benutzerdefinierte Marshall- und Unmarshal-Funktionen implementieren.
Eine Beispielimplementierung könnte sein:
// Type alias type JsonBirthDate time.Time // Implement UnmarshalJSON 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 } // Implement MarshalJSON func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) } // Example use in struct type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` }
Mit diesen benutzerdefinierten Funktionen kann die JSON-Daten können jetzt erfolgreich in die Ziel-Personenstruktur dekodiert werden, wobei das nicht standardmäßige Zeitformat entsprechend analysiert wird.
Das obige ist der detaillierte Inhalt vonWie dekodiere ich nicht standardmäßige Zeitformate aus JSON?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!