Golang 后端到 javascript JSON Parse
Posted
技术标签:
【中文标题】Golang 后端到 javascript JSON Parse【英文标题】:Golang backend to javascript JSON Parse 【发布时间】:2017-09-26 20:59:26 【问题描述】:我正在使用 golang 的 gorilla websocket 库:http://www.gorillatoolkit.org/pkg/websocket
这是我用来创建 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)
当我在 javascript 中使用 JSON.parse 时,我得到以下响应:
var clientUpdate = JSON.parse(evt.data);
eyJDaHVua3NXcml0dGVuIjowLCJDaHVua3NSZWFkIjowLCJCeXRlc1dyaXR0ZW4iOjU0NDgxLCJCeXRlc1JlYWQiOjc4NzgyLCJEYXRhQnl0ZXNXcml0dGVuIjowLCJEYXRhQnl0ZXNSZWFkIjowLCJBY3RpdmVQZWVycyI6MCwiVG90YWxQZWVycyI6NDMsIlRvcnJlbnRIYXNoU3RyaW5nIjoiOWY5MTY1ZDlhMjgxYTliOGU3ODJjZDUxNzZiYmNjODI1NmZkMTg3MSJ9 P>
我可以通过以下更改使其正常工作:
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"
我不知道哪种conn
有WriteJSON
方法,但看起来你正在获取一个已经是JSON 的切片,并将其再次编码为JSON,即可能不是你想做的。
抱歉忘记添加我正在使用的库:gorillatoolkit.org/pkg/websocket这正在创建连接:conn, err := upgrader.Upgrade(w, r, nil)
那么只使用WriteJSON
或 json.Marshal
;您不需要对其进行两次编码。
@RayfenWindspear:base64 是 []byte
的默认 json 编码格式
【参考方案1】:
gorilla websocket package 自动编码为 JSON,因此使用标准库进行编码也只是编码了两次,导致它显示为 base64。
谢谢大家!
【讨论】:
以上是关于Golang 后端到 javascript JSON Parse的主要内容,如果未能解决你的问题,请参考以下文章