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 marshal et de démarshaler personnalisées
Pour spécifier un format d'analyse personnalisé, un alias de type est créé pour le champ time, 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 dans le format souhaité et l'analyse en conséquence.
Structure et analyse mises à jour
La structure est mis à 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 personnalisée de marshaling et de démarshaling permet une analyse flexible des valeurs temporelles de JSON même lorsqu'elles s'écartent des formats standard.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3