大家好,我是从外部Api获取websocket信息的,它以这种方式给了我json响应:
`{"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}}"]}`
我把它放在这个结构中
type main struct { Name string `json:"name"` Args []arg `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"` }
并用代码解码
sReplace := strings.NewReplacer(`"{`, "{", `"]`, "]", "\\", ``) strN := sReplace.Replace(str) r := strings.NewReader(strN) d := json.NewDecoder(r) m := main{}
我遇到错误
invalid character 'h' after object key:value pair
我知道该错误是文本字段值的结果。有什么好的方法可以清理它或告诉解码器忽略文本字段的内容吗?
该应用程序正在解析包含substring的数据"text":"<a href="https。这是无效的JSON。错误消息抱怨hin href。
"text":"<a href="https
h
href
由于JSON值包含编码的JSON值,因此应用程序必须分两个步骤进行解码:
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"` } 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) }
游乐场的例子