我現在用的是大猩猩的WebSocket庫golang:http://www.gorillatoolkit.org/pkg/websocketGolang後端JavaScript的JSON解析
這是我使用創建WebSocket連接代碼:
conn, err := upgrader.Upgrade(w, r, nil)
有一個問題與發送JSON從golang到javascript。我可以得到它的工作,但必須做什麼似乎是不必要的步驟。這裏是golang後端的不工作的基本知識:
type clientDB struct{
ChunksWritten int64
ChunksRead int64
BytesWritten int64
BytesRead int64
DataBytesWritten int64
DataBytesRead int64
ActivePeers int
TotalPeers int
TorrentHashString string
}
fullClientDB := new(clientDB) //creating a new clientDB struct
b, err := json.Marshal(fullClientDB)
if err != nil {
fmt.Println(err)
return
}
conn.WriteJSON(b)
當我使用JSON.parse在JavaScript中,我得到如下回應:
var clientUpdate = JSON.parse(evt.data);
eyJDaHVua3NXcml0dGVuIjowLCJDaHVua3NSZWFkIjowLCJCeXRlc1dyaXR0ZW4iOjU0NDgxLCJCeXRlc1JlYWQiOjc4NzgyLCJEYXRhQnl0ZXNXcml0dGVuIjowLCJEYXRhQnl0ZXNSZWFkIjowLCJBY3RpdmVQZWVycyI6MCwiVG90YWxQZWVycyI6NDMsIlRvcnJlbnRIYXNoU3RyaW5nIjoiOWY5MTY1ZDlhMjgxYTliOGU3ODJjZDUxNzZiYmNjODI1NmZkMTg3MSJ9
我能得到它的工作在做以下修改:
conn.WriteJSON(string(b))
然後在JavaScript中我居然兩次解析數據。
var clientUpdate = JSON.parse(evt.data);
var clientUpdateJSON = JSON.parse(clientUpdate);
之後,我可以正確訪問數據作爲JSON對象。有沒有什麼我失蹤了關於通過websockets從golang向JavaScript發送JSON對象?
某處你是'base64'編碼數據。您在base64解碼後發佈的字符串是:{「ChunksWritten」:0,「ChunksRead」:0,「BytesWritten」:54481,「BytesRead」:78782,「DataBytesWritten」:0,「DataBytesRead」:0,「ActivePeers」: 0,「TotalPeers」:43,「TorrentHashString」:「9f9165d9a281a9b8e782cd5176bbcc8256fd1871」}' – RayfenWindspear
我不知道'conn'有一個'WriteJSON'方法,但它看起來像是在取一個已經是JSON的切片,並將其重新編碼爲JSON,這可能不是您想要做的。 – JimB
對不起忘了添加我正在使用的庫:http://www.gorillatoolkit.org/pkg/websocket 這是創建連接:'conn,err:= upgrader.Upgrade(w,r,nil)' – deranjer