Décodage de JSON avec des structures de variantes
Le point de terminaison que vous consommez renvoie JSON dans différents formats, parfois sous forme de chaîne et d'autres fois sous forme de tableau. Pour gérer cette incohérence, la question suivante explore la meilleure approche pour concevoir une structure Go pouvant prendre en charge les deux types.
La question :
Comment puis-je créer une structure Go une structure qui peut désassembler les données JSON avec des types de variables, soit une chaîne, soit un tableau de chaînes ? Existe-t-il une solution élégante au-delà de la tentative de décodage en deux structures distinctes ?
La réponse :
Une approche plus sophistiquée consiste à décomposer le JSON en un type d'interface{}. Cette approche indépendante du type permet une gestion dynamique de différents types de valeur.
Pour implémenter cette technique, créez une structure avec un champ de type interface{}, comme démontré dans l'exemple suivant :
<code class="go">type Response struct { Message interface{} `json:"message"` }</code>
Lors de la désorganisation des données JSON dans cette structure, vous pouvez utiliser un commutateur de type ou une assertion de type pour déterminer le type réel du champ Message. Cela vous permet de traiter les données en conséquence.
Voici un exemple d'implémentation :
<code class="go">func main() { inputs := []string{ `{"message":"Message"}`, `{"message":["ERROR_CODE"]}`, } for _, input := range inputs { var r Response if err := json.Unmarshal([]byte(input), &r); err != nil { panic(err) } switch x := r.Message.(type) { case string: fmt.Println("Success, message:", x) case []interface{}: fmt.Println("Error, code:", x) default: fmt.Println("Something else:", x) } } }</code>
Sortie :
Success, message: Message Error, code: [ERROR_CODE]
En utilisant l'approche interface{}, vous gagnez flexibilité dans la gestion des données JSON avec différents types, simplifiant ainsi votre base de code.
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!