Maison >développement back-end >Golang >Comment puis-je modifier dynamiquement les balises JSON dans les structures Go au moment de l'exécution ?
Une structure avec des structures imbriquées est donnée, et le but est de modifier dynamiquement la balise JSON de un champ spécifique dans la structure avant de l'encoder en JSON. La sortie JSON souhaitée doit avoir un nom de champ spécifique remplacé.
Utilisation d'une structure anonyme dans MarshalJSON
Dans les versions Go 1.8 et supérieures , une technique peut être utilisée pour modifier dynamiquement la balise JSON d'un champ au moment de l'exécution. Cela implique de créer une structure anonyme avec les balises de champ souhaitées dans la méthode MarshalJSON de la structure d'origine.
func (u *User) MarshalJSON() ([]byte, error) { type alias struct { ID int64 `json:"id"` Name string `json:"name"` // The modified JSON tag tag string `json:"-"` Another } var a alias = alias(*u) return json.Marshal(&a) }
Ici, la structure alias a les mêmes champs que la structure User, mais le champ Nom a le champ souhaité. Balise JSON ("nom" au lieu de "premier"). En renvoyant l'encodage JSON de la structure d'alias, le nom du champ JSON peut être remplacé dynamiquement.
Pour parcourir tous les champs d'une structure, y compris les structures intégrées, utilisez le Reflect package comme suit :
value := reflect.ValueOf(*u) for i := 0; i < value.NumField(); i++ { tag := value.Type().Field(i).Tag.Get("json") field := value.Field(i) fmt.Println(tag, field) }
Ce code itérera sur tous les champs, y compris ceux de la structure Another intégrée, et imprimez la balise JSON et la valeur du champ pour chaque champ.
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!