2

Hey guys I am getting websocket information from external Api and it's give me json response in this way:

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

I am putting it into this struc

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

and decode it with code

sReplace := strings.NewReplacer(`"{`, "{", `"]`, "]", "\\", ``) strN := sReplace.Replace(str) r := strings.NewReader(strN) d := json.NewDecoder(r) m := main{} 

I am getting error

invalid character 'h' after object key:value pair 

I know that the error is result of text field value. Is there any good way to clean it up or tell the decoder to ignore content of text field?

1 Answer 1

4

The application is parsing data containing the substring "text":"<a href="https. This is not valid JSON. The error message is complaining about the h in href.

Because the JSON value includes encoded JSON values, the application must decode in two steps:

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) } 

playground example

Sign up to request clarification or add additional context in comments.

1 Comment

wow thank you very much I tried to figure it out whole day. This struc and json allways where hard for me :(

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.