Dans le scénario où un point de terminaison consommé renvoie JSON dans divers formats, il est crucial de trouver une approche élégante pour gérer ces variations . Le dilemme survient en raison de la nature immuable du point de terminaison.
Une stratégie courante consiste à utiliser plusieurs structures pour le décodage, à tenter de décoder en une structure attendant une chaîne et à passer à une structure alternative avec un tableau en cas d'erreur. Bien que cette méthode atteigne la fonctionnalité souhaitée, il peut exister une approche plus raffinée.
Une solution recommandée consiste à désorganiser le JSON en une valeur d'interface{}. Cette valeur peut ensuite être examinée à l'aide d'assertions de type ou de commutateurs de type pour déterminer son type réel.
Un exemple dans Go démontre l'efficacité de cette approche :
<code class="go">type Response struct { Message interface{} `json:"message"` } 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>
Le résultat présente la gestion réussie et distinction des formats de réponse JSON :
Success, message: Message Error, code: [ERROR_CODE]
En tirant parti de cette approche, vous pouvez gérer facilement différents formats JSON, éliminant ainsi le besoin de plusieurs structures ou de gestion des erreurs.
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!