[
    [
        "client_connected",
         {
            "id": null,
            "channel": null,
            "user_id": null,
            "data": {
               "connection_id": null
            },
            "success": null,
            "result": null,
            "server_token": null
        }
    ]
]

鉴于来自websocket-rails服务器的JSON响应,我想知道解析此的最佳方法是什么,因为有没有任何键的字符串?

最佳答案

这不是最佳解决方案,但最简单:

由于JSON输入不是方便的键值对(或键值对),因此我们不能仅使用简单的struct(这是理想的)来对内容建模。

您的JSON输入是一个数组数组。里面有混合类型,所有类型都可以存储在空接口(interface)interface{}中(可以保存任何类型的值)。

因此,您可以用以下类型表示数据结构:

js := [][]interface{}{}

这是解码并打印它的完整代码:
js := [][]interface{}{}
err := json.Unmarshal([]byte(input), &js)
if err != nil {
    panic(err)
}
fmt.Printf("%q", js)

输出(包装):
[["client_connected" map["server_token":<nil> "id":<nil> "channel":<nil>
  "user_id":<nil> "data":map["connection_id":<nil>] "success":<nil> "result":<nil>]]]

Go Playground上尝试一下。

注意:

似乎我们可以通过对interface{}变量使用js类型来进一步简化它:
var js interface{}

它也可以工作,但是在这种情况下,我们甚至需要Type assertions才能到达“包装器”数组的元素,这将是倒退的一步。

关于ruby-on-rails - golang解码websocket-rails JSON响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29295999/

10-13 05:02