2017-09-26 44 views
0

我現在用的是大猩猩的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對象?

+0

某處你是'base64'編碼數據。您在base64解碼後發佈的字符串是:{「ChunksWritten」:0,「ChunksRead」:0,「BytesWritten」:54481,「BytesRead」:78782,「DataBytesWritten」:0,「DataBytesRead」:0,「ActivePeers」: 0,「TotalPeers」:43,「TorrentHashString」:「9f9165d9a281a9b8e782cd5176bbcc8256fd1871」}' – RayfenWindspear

+0

我不知道'conn'有一個'WriteJSON'方法,但它看起來像是在取一個已經是JSON的切片,並將其重新編碼爲JSON,這可能不是您想要做的。 – JimB

+0

對不起忘了添加我正在使用的庫:http://www.gorillatoolkit.org/pkg/websocket 這是創建連接:'conn,err:= upgrader.Upgrade(w,r,nil)' – deranjer

回答

1

大猩猩websocket package自動編碼爲JSON,所以使用標準庫進行編碼,只是編碼兩次,導致它顯示爲base64。

謝謝你們!