Maison  >  Article  >  développement back-end  >  Comment personnaliser le marshaling JSON pour les champs horaires dans Golang ?

Comment personnaliser le marshaling JSON pour les champs horaires dans Golang ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 20:47:30904parcourir

How to Customize JSON Marshaling for Time Fields in Golang?

Personnalisation du maréchal JSON pour les champs temporels avec remplacement dans Golang

Dans Go, la fonction Marshal d'encodage/json fournit un moyen simple de convertir des structures de données en JSON. Cependant, il utilise une disposition par défaut pour les champs time.Time. Cet article explique comment remplacer cette mise en page pour utiliser un format personnalisé.

Considérez la structure suivante :

<code class="go">type Person struct {
    age  int
    name string
    dob  time.Time
}</code>

Par défaut, le marshaling de cette structure convertit le champ dob en mise en page RFC3339, qui n'est peut-être pas toujours souhaité.

Pour remplacer la mise en page par défaut, nous pouvons utiliser un type personnalisé qui intègre time.Time et implémente MarshalJSON :

<code class="go">type CustomTime struct {
    time.Time
}

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

Maintenant, remplacez time.Time par CustomTime dans la structure Person :

<code class="go">type Person struct {
    age  int
    name string
    dob  CustomTime
}</code>

Lors du marshaling de cette structure Person modifiée, la mise en page personnalisée sera appliquée au champ dob.

Exemple :

<code class="go">package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type Person struct {
    age  int
    name string
    dob  CustomTime
}

func main() {
    dob := time.Now()
    p := Person{25, "John Doe", CustomTime{dob}}
    jsonBytes, err := json.Marshal(p)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(jsonBytes))
}</code>

Sortie : {"age":25,"name":"John Doe","dob":"2023-03-08T14:41:21 00:00"}

Dans ce Par exemple, la mise en page personnalisée est "my_custom_layout" qui n'est pas présente dans la structure Person. Au lieu de cela, nous l'avons spécifié directement dans la méthode MarshalJSON de CustomTime.

Cette personnalisation vous permet de contrôler la disposition des champs time.Time lors de l'utilisation de la fonction Marshal, offrant flexibilité et contrôle sur la représentation JSON.

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