Maison >développement back-end >Golang >Comment gérer `json:'omitempty'` avec les champs `time.Time` dans Go ?

Comment gérer `json:'omitempty'` avec les champs `time.Time` dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 21:29:14970parcourir

How to Handle `json:

JSON omitempty with time.Time Field

Dans Go, l'annotation json,omitempty" permet d'exclure les champs avec des valeurs vides du JSON sérialisation. Cependant, cela ne fonctionne pas avec les champs time.Time car ils ont une valeur nulle qui est considérée comme une date valide.

Pour Pour résoudre ce problème, définissez le champ time.Time sur time.Time{} au lieu de le laisser avec une valeur nulle. Cela demandera à l'encodeur JSON de traiter le champ comme vide.

Considérez l'exemple suivant :

package main

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

type MyStruct struct {
    Timestamp time.Time `json:",omitempty"`
    Date      time.Time `json:",omitempty"`
    Field     string    `json:",omitempty"`
}

func main() {
    ms := MyStruct{
        Timestamp: time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC),
        Date:      time.Time{},
        Field:     "",
    }

    bb, err := json.Marshal(ms)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(bb))
}

Sortie :

{"Timestamp":"2015-09-18T00:00:00Z"}

Vous pouvez également utiliser un pointeur sur time.Time et le régler sur zéro pour atteindre l'objectif même effet :

type MyStruct struct {
    Timestamp *time.Time `json:",omitempty"`
    Date      *time.Time `json:",omitempty"`
    Field     string    `json:",omitempty"`
}

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