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!