Intégrer une structure avec une structure MarshalJSON() personnalisée
Quand en intégrant une structure avec une méthode MarshalJSON() personnalisée, les champs de la structure externe sont promus au type promu, en remplaçant la méthode MarshalJSON() de la structure intégrée. Cela peut conduire à des résultats inattendus lors du rassemblement de la structure externe.
Problème :
Considérez les structures suivantes :
type Person struct { Name string `json:"name"` } func (p *Person) MarshalJSON() ([]byte, error) { return json.Marshal(struct { Name string `json:"name"` }{ Name: strings.ToUpper(p.Name), }) } type Employee struct { *Person JobRole string `json:"jobRole"` }
Marshalling d'une instance Employee produit de l'inattendu résultats :
p := Person{"Bob"} e := Employee{&p, "Sales"} output, _ := json.Marshal(e) fmt.Printf("%s\n", string(output))
Sortie :
{"name": "BOB"}
Le champ jobRole est manquant, bien qu'il soit défini sur l'instance Employee.
Solution :
Option 1 : éviter MarshalJSON() sur Embedded Tapez
Option 2 : implémenter MarshalJSON() sur le type externe
Remarque : Les deux options nécessitent une manipulation manuelle et peuvent affecter l'ordre des champs dans la sortie JSON finale.
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!