Maison >développement back-end >Golang >Comment décoder une chaîne JSON contenant des chaînes codées en JSON imbriquées ?

Comment décoder une chaîne JSON contenant des chaînes codées en JSON imbriquées ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 04:08:18325parcourir

How to Decode a JSON String Containing Nested JSON-Encoded Strings?

Décoder JSON avec les chaînes codées en JSON incluses

Problème

Lors de la tentative de décodage d'une chaîne JSON contenant un JSON imbriqué objet, l'application reçoit une erreur : "caractère 'h' invalide après la clé de l'objet : valeur paire."

Solution

L'erreur est provoquée par un caractère non valide dans la valeur de l'objet JSON imbriqué. Pour décoder correctement le JSON, cela doit être effectué en deux étapes :

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"`
}

// Parse input JSON string
str := `{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"<a href=\\"https://play.spotify.com/browse\\" target=\\"_blank\\">https://play.spotify.com/browse</a>\",\"time\":1455397119}}"]}`
var m main
if err := json.Unmarshal([]byte(str), &m); err != nil {
    log.Fatal(err)
}

// Decode nested JSON object
var args arg
if err := json.Unmarshal([]byte(m.Args[0]), &args); err != nil {
    log.Fatal(err)
}

La première étape décode l'objet JSON externe en une structure principale, qui contient un tableau de chaînes. La deuxième étape parcourt le tableau et décode chaque chaîne en tant qu'objet JSON imbriqué. Cela permet à l'application d'analyser correctement les données JSON et d'éviter l'erreur.

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