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\":\"<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)
}
var args arg
if err := json.Unmarshal([]byte(m.Args[0]), &args); err != nil {
log.Fatal(err)
}
登录后复制
在此示例中,第一遍是通过将外部 JSON 字符串解码到主结构中来执行的,其中包含“name”和“args”字段。然后,“args”字段在第二遍中被解析为单独的 JSON 字符串,删除 HTML 实体并将其恢复为有效的 arg 对象。这种方法可确保正确处理所有 JSON 数据并避免错误。