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

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

Barbara Streisand
Libérer: 2024-11-02 20:47:30
original
1002 Les gens l'ont consulté

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

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

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

<code class="go">type Person struct {
    age  int
    name string
    dob  CustomTime
}</code>
Copier après la connexion

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

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!

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