Heim  >  Artikel  >  Backend-Entwicklung  >  Wie dekodiere ich JSON mit nicht standardmäßigen Zeitformaten?

Wie dekodiere ich JSON mit nicht standardmäßigen Zeitformaten?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 08:37:02660Durchsuche

How to Decode JSON with Non-Standard Time Formats?

Benutzerdefiniertes Unmarshal für nicht standardmäßige JSON-Zeitformate

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn