Maison >développement back-end >Golang >Comment puis-je personnaliser le marshaling JSON pour « time.Time » dans Go ?

Comment puis-je personnaliser le marshaling JSON pour « time.Time » dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 03:09:30884parcourir

How can I customize JSON marshaling for `time.Time` in Go?

Personnalisation du marshaling JSON pour Time.Time

Dans Go, la fonction Marshal générique du package encoding/json sérialise les valeurs time.Time comme chaînes utilisant un format ISO 8601 par défaut. Cependant, il est possible de personnaliser ce comportement en remplaçant la disposition utilisée pour le marshaling temporel.

Considérez la structure suivante :

<code class="go">type MyStruct struct {
    StartTime time.Time
    Name      string
}</code>

Pour utiliser une disposition temporelle personnalisée lors du marshaling MyStruct vers JSON, nous pouvons intégrer le type time.Time dans une structure personnalisée qui remplace les méthodes MarshalText et MarshalJSON. Voici un exemple :

<code class="go">import (
    "encoding/json"
    "time"
)

type CustomTime struct {
    time.Time
    Layout string
}

func (ct CustomTime) MarshalText() ([]byte, error) {
    return []byte(ct.Format(ct.Layout)), nil
}

func (ct CustomTime) MarshalJSON() ([]byte, error) {
    return []byte(`"` + ct.Format(ct.Layout) + `"`), nil
}</code>

Dans ce type personnalisé, nous avons intégré le time.Time et ajouté un champ Layout supplémentaire pour spécifier la chaîne de mise en page souhaitée. En remplaçant les méthodes MarshalText et MarshalJSON, nous pouvons contrôler le formatage du champ time.

Pour utiliser CustomTime avec votre structure, remplacez le champ time.Time par un champ CustomTime et initialisez le champ Layout avec la mise en page souhaitée. chaîne. Par exemple :

<code class="go">type CustomMyStruct struct {
    StartTime CustomTime
    Name      string
}

func main() {
    s := CustomMyStruct{
        StartTime: CustomTime{
            Time:   time.Now(),
            Layout: "2006-01-02 15:04:05",
        },
        Name: "ali",
    }

    data, err := json.Marshal(s)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(data))
}</code>

Ce code sérialisera l'instance MyStruct au format JSON, en utilisant la disposition temporelle spécifiée.

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!

Déclaration:
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