Maison > Article > développement back-end > Comment décoder JSON avec des formats d’heure non standard ?
Pour décoder JSON avec des formats d'heure non standard en structures personnalisées, les fonctions de marshal et de démarshal intégrées offrent une flexibilité.
Considérez le JSON suivant :
{ "name": "John", "birth_date": "1996-10-07" }
Et un personnalisé struct pour contenir les données :
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
Le décodage de ce JSON à l'aide du décodeur par défaut échoue en raison du format d'heure non standard. Pour gérer cela, implémentez des fonctions de marshal et de démarshal personnalisées :
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)) }
En ajoutant JsonBirthDate à la structure Person et en implémentant ces fonctions, le code suivant décodera correctement le JSON :
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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!