Maison > Article > développement back-end > Comment personnaliser la disposition des champs Time.Time dans le marshaling JSON dans Go ?
Comment ajuster la disposition des champs Time.Time dans le marshaling JSON
Dans Go, la fonction d'encodage/json Marshal fournit un moyen générique pour encoder les structures de données au format JSON. Lors du marshaling d’un champ time.Time, il utilise généralement une disposition par défaut. Cependant, il peut y avoir des scénarios dans lesquels vous devez personnaliser la mise en page utilisée pour le formatage de l'heure.
Considérez l'exemple suivant :
<code class="go">s := {"starttime":time.Now(), "name":"ali"}</code>
Pour encoder des s en JSON à l'aide de Marshal, vous appelleriez normalement :
<code class="go">json.Marshal(s)</code>
Cependant, vous souhaiterez peut-être utiliser une mise en page spécifique pour le champ « heure de début ». Pour y parvenir, nous pouvons exploiter le type personnalisé « jsonTime » :
<code class="go">type jsonTime struct { time.Time f string } func (j jsonTime) format() string { return j.Time.Format(j.f) } func (j jsonTime) MarshalText() ([]byte, error) { return []byte(j.format()), nil }</code>
La structure jsonTime intègre le type time.Time pour conserver l'accès à ses méthodes. La méthode format() renvoie une représentation sous forme de chaîne au format personnalisé de la valeur temporelle à l'aide de la chaîne de mise en page f.
Pour remplacer la mise en page par défaut utilisée par Marshal, nous pouvons implémenter la méthode MarshalJSON pour jsonTime :
<code class="go">func (j jsonTime) MarshalJSON() ([]byte, error) { return []byte(`"` + j.format() + `"`), nil }</code>
Cela garantit que le champ starttime dans la sortie JSON est formaté selon la mise en page spécifiée.
Enfin, vous pouvez utiliser le type jsonTime pour obtenir la mise en page souhaitée :
<code class="go">jt := jsonTime{time.Now(), time.Kitchen} x := map[string]interface{}{ "foo": jt, "bar": "baz", } data, err := json.Marshal(x) if err != nil { panic(err) } fmt.Printf("%s", data)</code>
En utilisant le type jsonTime et son implémentation de formatage personnalisé, vous pouvez contrôler efficacement la disposition utilisée par la fonction Marshal d'encoding/json pour les champs time.Time.
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!