使用巢狀編碼字串解碼JSON
在提供的場景中,WebSocket 資訊以包含巢狀JSON 的JSON 回應的形式接收- 編碼字串。目標是將此 JSON 解碼為自訂 Go 資料結構。
由於嵌套 JSON 字串的「文字」欄位中的無效字符,最初的解碼嘗試失敗。這是因為該值包含 HTML 標記,這不是有效的 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) } for _, argStr := range m.Args { var args arg if err := json.Unmarshal([]byte(argStr), &args); err != nil { log.Fatal(err) } fmt.Println(args) }
此程式碼示範了嵌套解碼處理,允許應用程式從包含編碼字串的JSON 回應中提取所需的資料。
以上是如何在 Go 中解碼嵌套的 JSON 編碼字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!