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
Libérer: 2024-12-05 01:54:08
original
530 Les gens l'ont consulté

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal