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" 我不知道哪种connWriteJSON 方法,但看起来你正在获取一个已经是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的主要内容,如果未能解决你的问题,请参考以下文章

通过 REST 与 Keycloak 保护的后端进行后端到后端通信

Terraform 后端到 azure blob 存储错误

从Java后端到Web全栈 百度云

后端语言的选择

从后端到前端之Vue写个表格试试水

联想项目推荐|Java后端开发工程师