Analyse du format d'heure non standard à partir de JSON
Lors du décodage des données JSON dans une structure personnalisée, des incohérences dans les formats de date peuvent survenir. Pour résoudre ce problème, Golang offre la possibilité d'implémenter des fonctions de marshal et de démarshal personnalisées.
Fonctions de marshaler et de démarshaler personnalisées
Pour spécifier un format d'analyse personnalisé, un alias de type est créé pour le champ horaire, et les interfaces Marshaler et Unmarshaler sont implémentées comme suit :
type JsonBirthDate time.Time // UnmarshalJSON translates a JSON string to a time value. 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 } // MarshalJSON converts a time value to a JSON string. func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
Cette logique personnalisée vérifie si la valeur JSON est au format souhaité et l'analyse en conséquence.
Structure et analyse mises à jour
La structure est mise à jour pour utiliser le type personnalisé, et le décodage peut se dérouler comme d'habitude :
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` } decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
Fonctionnalités supplémentaires
Pour plus de commodité, une méthode Format peut être ajoutée pour fournir une représentation formatée de la date :
// Format prints the date using the specified format string. func (j JsonBirthDate) Format(s string) string { t := time.Time(j) return t.Format(s) }
Cette approche de marshaling et de démarshaling personnalisée permet une analyse flexible des valeurs de temps à partir de JSON même lorsque ils s'écartent des formats standards.
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!