Décodage des formats d'heure non standard à partir de JSON
Lorsque vous traitez des données JSON contenant des formats d'heure non standard, le décodage JSON standard peut rencontrer problèmes car il s’attend à des modèles de format d’heure spécifiques. Pour surmonter ce problème, des fonctions de marshal et de démarshal personnalisées peuvent être implémentées.
Par exemple, considérons le JSON suivant :
{ "name": "John", "birth_date": "1996-10-07" }
Supposons que nous voulions décoder cela dans une structure Person :
type Person struct { Name string `json:"name"` BirthDate time.Time `json:"birth_date"` }
Utilisation du décodeur JSON standard :
person := Person{} decoder := json.NewDecoder(req.Body); if err := decoder.Decode(&person); err != nil { log.Println(err) }
conduit à un erreur, car le décodeur ne peut pas analyser le format d'heure non standard. Pour résoudre ce problème, nous pouvons créer un alias de type personnalisé pour la valeur temporelle et implémenter des fonctions de marshal et de démarshal personnalisées.
Un exemple d'implémentation pourrait être :
// 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"` }
Avec ces fonctions personnalisées, le Les données JSON peuvent désormais être décodées avec succès dans la structure Person cible, avec le format d'heure non standard analysé de manière appropriée.
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!