Maison > développement back-end > Golang > Comment puis-je modifier dynamiquement les balises JSON dans les structures Go au moment de l'exécution ?

Comment puis-je modifier dynamiquement les balises JSON dans les structures Go au moment de l'exécution ?

Barbara Streisand
Libérer: 2024-12-21 15:46:10
original
878 Les gens l'ont consulté

How Can I Dynamically Change JSON Tags in Go Structs at Runtime?

Changement dynamique des balises JSON dans les structures

Problème

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é.

Solution

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)
}
Copier après la connexion

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.

Itération sur tous les champs

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)
}
Copier après la connexion

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!

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