Gestion du démarshaling JSON avec des tableaux d'objets ou des chaînes dans Go
Lors du démarshaling JSON en structures dans Go, vous pouvez rencontrer des champs qui peuvent contenir différents types (objets ou chaînes) d’une requête à l’autre. Par exemple, un champ nommé "mykey" peut parfois contenir des objets en ligne et d'autres fois contenir des références à des objets situés sur des chemins spécifiques.
Solution Go-Idiomatic
Un Go idiomatique L'approche pour gérer cette situation consiste à définir une structure avec un champ dont le type est une tranche de valeurs d'interface {}. Cela permet au champ de contenir à la fois des objets et des chaînes, car Go les décodera automatiquement dans le type approprié en fonction du JSON entrant. Le code suivant le démontre :
type Data struct { MyKey []interface{} `json:"mykey"` }
Vérification de type
Après avoir désorganisé le JSON, vous pouvez utiliser un commutateur de type pour faire la distinction entre les objets et les chaînes dans la tranche :
for i, v := range data.MyKey { switch x := v.(type) { case string: fmt.Println("Got a string: ", x) case map[string]interface{}: fmt.Printf("Got an object: %#v\n", x) } }
Cela vous permet de gérer les deux types de valeurs de manière structurée et efficace manière.
Exemple
Considérez le JSON suivant :
{ "mykey": [ {obj1}, {obj2} ] }
Après avoir désorganisé ce JSON dans une structure Data, la tranche MyKey contiendra deux éléments, chacun de type map[string]interface{}.
Alternativement, si le JSON contenait des références aux objets :
{ "mykey": [ "/obj1/is/at/this/path", "/obj2/is/at/this/other/path" ] }
La tranche MyKey contiendra deux éléments, chacun de type chaîne.
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!