Masalah:
Apabila menghuraikan data soket web dalam format JSON, pengguna mungkin menghadapi ralat disebabkan oleh rentetan JSON yang dikodkan bersarang yang melanggar sintaks JSON. Sebagai contoh, nilai rentetan medan "teks" mungkin mengandungi entiti HTML seperti "" dan "<", menyebabkan penyahkod gagal.
Penyelesaian:
Untuk mengendalikan rentetan dikodkan bersarang dalam JSON, aplikasi mesti menyahkod data dalam dua langkah:
Berikut ialah contoh coretan kod yang menunjukkan pendekatan ini:
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\":\"https://play.spotify.com/browse\",\"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) }Dalam contoh ini, hantaran pertama dilakukan dengan menyahkod rentetan JSON luar ke dalam struct utama, yang mengandungi medan "nama" dan "args". Medan "args" kemudiannya dihuraikan sebagai rentetan JSON yang berasingan dalam laluan kedua, mengalih keluar entiti HTML dan memulihkannya kepada objek arg yang sah. Pendekatan ini memastikan semua data JSON diproses dengan betul dan ralat dielakkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Rentetan Dikodkan Bersarang dalam Data Websocket JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!