Maison > développement back-end > Golang > Comment omettre correctement les champs de temps de valeur nulle dans le marshaling JSON ?

Comment omettre correctement les champs de temps de valeur nulle dans le marshaling JSON ?

DDD
Libérer: 2024-12-27 12:19:10
original
362 Les gens l'ont consulté

How to Properly Omit Zero-Value Time Fields in JSON Marshaling?

Personnalisation du marshaling JSON pour les champs de temps avec une balise d'omission

L'un des défis lors de l'utilisation de JSON avec des champs de temps est de s'assurer qu'ils sont omis lorsque pas réglé. Malgré l'utilisation de la balise json:",omitempty", le résultat souhaité consiste à exclure l'heure. Les champs d'heure avec une valeur nulle peuvent ne pas se produire.

Pour comprendre ce comportement, il est crucial de reconnaître que la valeur "zéro" pour les structures diffère de celui des autres types de données. Pour les structures, une valeur zéro représente une instance structurelle valide où tous les champs contiennent leurs valeurs zéro respectives, ce qui la distingue des valeurs vides.

Une solution à ce défi réside dans la conversion des champs time.Time en pointeurs. Les pointeurs Nil sont intrinsèquement traités comme « vides » lors du marshaling et du démarshaling JSON, évitant ainsi le problème de l'omission des champs temporels de valeur nulle.

type MyStruct struct {
    Timestamp *time.Time `json:",omitempty"`
    Date      *time.Time `json:",omitempty"`
    Field     string     `json:",omitempty"`
}
Copier après la connexion

En utilisant des pointeurs pour les champs temporels, nous pouvons efficacement atteindre le résultat souhaité :

ts := time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC)
ms := MyStruct{
    Timestamp: &ts,
    Field:     "",
}
Copier après la connexion

Cette solution produit le JSON souhaité sortie :

{"Timestamp":"2015-09-18T00:00:00Z"}
Copier après la connexion

Alternativement, si la modification de la structure pour utiliser des pointeurs n'est pas souhaitable, l'implémentation d'interfaces Marshaler et Unmarshaler personnalisées offre une possibilité d'adapter le comportement du marshaling et du démarshaling JSON pour les champs time.Time. L'utilisation de la méthode Time.IsZero() permet un contrôle précis sur l'exclusion ou non des champs time.Time en fonction de leur valeur zéro.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal