Désactivation/Marshaling personnalisé pour les formats d'heure JSON non standard
Lorsque vous traitez des données JSON contenant des valeurs d'heure dans des formats non standard, le décodeur JSON intégré peut rencontrer des erreurs. Pour gérer de telles situations, des fonctions de marshal et de démarshal personnalisées peuvent être implémentées.
Considérez le JSON suivant :
{ "name": "John", "birth_date": "1996-10-07" }
Et la structure Go souhaitée :
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
Utilisation le décodeur JSON standard entraînerait une erreur lors de l'analyse du champ "birth_date". Pour personnaliser ce comportement, un alias de type peut être créé et ajouté à la structure :
type JsonBirthDate time.Time
Ensuite, des fonctions de marshal et de démarshal personnalisées sont implémentées :
func (j *JsonBirthDate) UnmarshalJSON(b []byte) error { s := strings.Trim(string(b), `"`) // Remove quotes 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)) }
Avec ces fonctions personnalisées, le JSON peut maintenant être décodé dans la structure Go comme prévu :
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) } // Print the birth date using the Format function fmt.Println(person.BirthDate.Format("2006-01-02"))
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!