Maison > développement back-end > Golang > Plusieurs balises JSON peuvent-elles être définies pour un seul champ Go Struct ?

Plusieurs balises JSON peuvent-elles être définies pour un seul champ Go Struct ?

Susan Sarandon
Libérer: 2024-12-24 14:27:18
original
723 Les gens l'ont consulté

Can Multiple JSON Tags Be Defined for a Single Go Struct Field?

Struct avec plusieurs balises JSON

Dans un scénario où une réponse JSON est reçue d'un serveur et doit être désorganisée dans une structure, il peut être nécessaire de modifier les balises JSON avant de l'envoyer à un autre serveur. En règle générale, cela implique de créer une nouvelle structure et de copier manuellement les données.

Cependant, il convient de se demander s'il est possible de définir plusieurs balises JSON pour une seule structure. Tenter d'attacher plusieurs balises au même champ directement dans la définition de la structure, comme dans l'exemple ci-dessous, n'est pas pris en charge :

type Foo struct {
    Name string `json:"name" json:"employee_name"`
    Age  int    `json:"age" json:"-"`
}
Copier après la connexion

Au lieu de cela, une solution possible réside dans la conversion entre deux structures disposées de manière identique (correspondant noms, types et ordre des champs). Bien que cette approche soit généralement déconseillée, elle peut être utilisée avec prudence pour obtenir le résultat souhaité.

type Foo struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

type Bar struct {
    Name string `json:"employee_name"`
    // Age is not exported
    age int `json:"-"`
}

func main() {
    foo := Foo{}
    // Unmarshal JSON
    err := json.Unmarshal([]byte("{\"name\":\"Sam\",\"age\":20}"), &foo)
    if err != nil {
        log.Fatal(err)
    }

    // Cast between types, overwriting internal representation
    bar := (*Bar)(unsafe.Pointer(&foo))

    // Marshal modified JSON
    data, err := json.Marshal(bar)
    if err != nil {
        log.Fatal(err)
    }

    // Example JSON: {"employee_name":"Sam"}
    fmt.Println(string(data))
}
Copier après la connexion

Il est important de noter que cette approche de casting doit être utilisée judicieusement. La deuxième structure ne doit pas être exportée pour éviter toute utilisation involontaire en dehors du contexte spécifique.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal