Maison >développement back-end >Golang >Comment gérer les chaînes codées imbriquées dans les données JSON Websocket ?

Comment gérer les chaînes codées imbriquées dans les données JSON Websocket ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 01:54:08544parcourir

How to Handle Nested Encoded Strings in JSON Websocket Data?

Décodage du JSON avec des chaînes codées imbriquées

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 :

  1. Premier passage : Décodez la couche JSON externe à l'aide d'une structure de base, qui ignore les chaînes codées imbriquées et les traite comme du texte normal.
  2. Deuxième passe : Après avoir obtenu les données de la couche externe, décodez les chaînes JSON imbriquées dans les "args" field.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn