Maison > développement back-end > Golang > le corps du texte

Comment personnaliser la disposition des champs Time.Time dans le marshaling JSON dans Go ?

Patricia Arquette
Libérer: 2024-11-01 05:24:27
original
802 Les gens l'ont consulté

How to Customize the Layout of Time.Time Fields in JSON Marshaling in 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>
Copier après la connexion

Pour encoder des s en JSON à l'aide de Marshal, vous appelleriez normalement :

<code class="go">json.Marshal(s)</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!