Maison > Article > développement back-end > Comment gérer différents types de valeurs JSON lors du démarshalage dans Go ?
Démarshaling JSON avec différents types de valeurs dans Go
Dans Go, le démarshaling JSON implique généralement de mapper les données JSON à une structure correspondante. Cependant, des difficultés surviennent lorsque la structure des données peut varier, présentant la valeur d'une clé sous la forme d'un tableau d'objets ou de chaînes.
Problème :
Une API fournit des structures de données incohérentes, ce qui entraîne dans les variations de valeur potentielles pour une clé : objets en ligne ou références à des objets (/obj1/is/at/this/path).
Solution :
Pour gérer cette variabilité, envisagez les techniques suivantes :
1 . Annuler le marshal vers un type d'interface :
Désassembler les données JSON vers une structure contenant un champ de type []interface{}. Cela permettra à la fois aux chaînes (décodées en tant que chaînes) et aux objets (décodés en tant que map[string]interface{}) d'être stockés dans le tableau.
Exemple de code :
type Data struct { MyKey []interface{} `json:"mykey"` }
2. Changement de type pour la différenciation :
Une fois les données non marshalées, utilisez un commutateur de type pour faire la distinction entre les chaînes et les objets.
Exemple de code :
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) } }
Remarques supplémentaires :
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!