Dans les scénarios d'analyse JSON typiques, les valeurs de temps doivent adhérer au format RFC 3339 ("2006-01-02T15 :04:05Z07:00"). Cependant, lorsqu'il s'agit de formats d'heure non standard, le décodeur JSON par défaut rencontre des problèmes.
Pour surmonter ce problème, on peut implémenter des méthodes de marshal et de démarshal personnalisées pour un type de données personnalisé qui représente le format d'heure non standard. Par exemple :
// Create a type alias for the non-standard time format type JsonBirthDate time.Time // Implement UnmarshalJSON to handle conversion from JSON string to 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 } // Implement MarshalJSON to handle conversion from time.Time to JSON string func (j JsonBirthDate) MarshalJSON() ([]byte, error) { return json.Marshal(time.Time(j)) }
Maintenant, intégrez ce type personnalisé dans la structure Person :
type Person struct { Name string `json:"name"` BirthDate JsonBirthDate `json:"birth_date"` }
En utilisant ces méthodes personnalisées, le décodeur JSON peut désormais analyser avec succès l'heure non standard format :
person := Person{} decoder := json.NewDecoder(req.Body) if err := decoder.Decode(&person); err != nil { log.Println(err) }
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!