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"` }
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: "", }
Cette solution produit le JSON souhaité sortie :
{"Timestamp":"2015-09-18T00:00:00Z"}
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!