Problème :
Lors de l'analyse des données Websocket au format JSON, les utilisateurs peuvent rencontrer des erreurs en raison de chaînes JSON codées imbriquées qui violent la syntaxe JSON. Par exemple, la valeur de chaîne d'un champ "texte" peut contenir des entités HTML telles que "" et "<", provoquant l'échec du décodeur.
Solution :
Pour gérer les chaînes encodées imbriquées en JSON, l'application doit décoder les données en deux étapes :
Voici un exemple d'extrait de code illustrant cette approche :
type main struct { Name string `json:"name"` Args []string `json:"args"` } type arg struct { Method string `json:"method"` Params par `json:"params"` } type par struct { Channel string `json:"channel,omitempty"` Name string `json:"name,omitempty"` NameColor string `json:"nameColor,omitempty"` Text string `json:"text,omitempty"` Time int64 `json:"time,omitempty"` } // Input JSON string str := `{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"https://play.spotify.com/browse\",\"time\":1455397119}}"]}` var m main if err := json.Unmarshal([]byte(str), &m); err != nil { log.Fatal(err) } var args arg if err := json.Unmarshal([]byte(m.Args[0]), &args); err != nil { log.Fatal(err) }Dans cet exemple, la première passe est effectuée en décodant la chaîne JSON externe dans la structure principale, qui contient les champs "name" et "args". Le champ « args » est ensuite analysé comme une chaîne JSON distincte lors du deuxième passage, supprimant les entités HTML et le restaurant en un objet arg valide. Cette approche garantit que toutes les données JSON sont correctement traitées et que les erreurs sont évitées.
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!