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

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

Patricia Arquette
Freigeben: 2024-11-09 08:37:02
Original
712 Leute haben es durchsucht

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"
}
Nach dem Login kopieren

Und eine benutzerdefinierte Struktur zum Speichern der Daten:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}
Nach dem Login kopieren

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))
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage