首頁 >後端開發 >Golang >如何處理 JSON Websocket 資料中的巢狀編碼字串?

如何處理 JSON Websocket 資料中的巢狀編碼字串?

Patricia Arquette
Patricia Arquette原創
2024-12-05 01:54:08543瀏覽

How to Handle Nested Encoded Strings in JSON Websocket Data?

使用巢狀編碼字串解碼JSON

問題:

解析JSON 格式的websocket 資料時,使用者可能會遇到錯誤由於巢狀編碼的JSON 字串違反了JSON 語法。例如,「text」欄位的字串值可能包含「」和「

解決方案:

要處理JSON 中的巢狀編碼字串,應用程式必須將資料解碼為兩個步驟:

  1. 第一遍: 使用基本結構解碼外部JSON層,該結構忽略嵌套的編碼字串並將它們視為常規文字。
  2. 第二遍:取得外層資料後,解碼「args」內嵌套的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"`
}

// 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 資料並避免錯誤。

以上是如何處理 JSON Websocket 資料中的巢狀編碼字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn