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:"-"` }
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)) }
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!