Marshalling et Unmarshalling avec plusieurs balises JSON
Lors du démarshalling des données JSON dans une structure, chaque champ doit avoir une balise JSON correspondante pour spécifier son clé JSON correspondante. Cependant, vous devrez parfois créer un nouveau fichier JSON avec les mêmes données mais des balises JSON différentes.
Dans votre cas, vous souhaitez annuler le marshalage du JSON {"name":"Sam","age": 20} à la structure Foo, puis créez une version modifiée avec les balises employ_name et - pour l'envoyer à un autre serveur.
Bien qu'il soit pratique d'attribuer plusieurs balises JSON à un seul champ lorsque vous proposé, cela n’est pas pris en charge dans le package encoding/json dans Go. Au lieu de cela, vous pouvez obtenir le résultat souhaité en utilisant des types et un casting non exportés.
package main import ( "bytes" "encoding/json" ) type Foo struct { Name string `json:"name"` Age int `json:"age"` } func main() { data := []byte(`{"name":"Sam","age":20}`) // Unmarshal to Foo var foo Foo json.Unmarshal(data, &foo) // Create a new type with modified tags type Bar struct { Name string `json:"employee_name"` Age int `json:"-"` } // Cast from Foo to Bar bar := Bar(foo) // Marshal Bar buf := new(bytes.Buffer) json.NewEncoder(buf).Encode(bar) println(buf.String()) }
Remarque : Cette approche repose sur la barre de types non exportée. L'utilisation de types non exportés permet d'éviter une utilisation accidentelle ailleurs dans la base de code. De plus, assurez-vous que les noms de champs, les types et l'ordre dans les deux structures correspondent exactement pour que le casting fonctionne correctement.
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!