Le démarshaling JSON de Go présente des problèmes avec les dates et heures formatées selon la norme ISO8601/RFC3339 qui ont des décalages de fuseau horaire dans le format 0200 au lieu de 02h00.
Format JSON incorrect :
2016-08-08T21:35:14.052975+0200
Format correct attendu :
2016-08-08T21:35:14.052975+02:00
Cause possible :
Le JSON a été généré à l'aide de la fonction strftime de C avec une chaîne de format qui n'inclut pas les deux-points dans le décalage du fuseau horaire.
Pour résoudre ce problème et permettre la désorganisation correcte des deux formats, un type de champ d'heure personnalisé peut être défini :
<code class="go">type MyTime struct { time.Time } func (self *MyTime) UnmarshalJSON(b []byte) (err error) { s := string(b) // Remove double quotes from JSON value s = s[1:len(s)-1] t, err := time.Parse(time.RFC3339Nano, s) if err != nil { t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s) } self.Time = t return }</code>
Dans ce type personnalisé, la méthode UnmarshalJSON tente pour analyser la chaîne selon à la fois la RFC3339Nano (avec deux points dans le décalage du fuseau horaire) et une version modifiée de RFC3339Nano sans les deux-points.
Pour utiliser le type de champ d'heure personnalisé :
<code class="go">type Test struct { Time MyTime `json:"time"` }</code>
Cette structure peut ensuite être désorganisée à partir de l'un ou l'autre format JSON avec le décalage de fuseau horaire incorrect ou correct.
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!