ruby-on-rails - golang 解码 websocket-rails JSON 响应

标签 ruby-on-rails json go websocket

[
    [
        "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 上试试.

注意事项:

看起来我们可以通过为 js 变量使用 interface{} 类型来进一步简化它:

var js interface{}

它也有效,但在这种情况下我们需要 Type assertions甚至只是获取“包装器”数组的元素,这也是退后一步。

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

相关文章:

android - JSON omdb解析

ruby-on-rails - 通过 JSON/XML 将二进制数据发送到 (Rails) RESTful 端点?

go - 用于检测 CGO 构建的预处理器标志?

go - 为什么带有网络 I/O 的 goroutines 被阻塞了?

ruby-on-rails - 映射到散列的键

ruby-on-rails - puma-dev 链接在 Linux 下不工作

ruby-on-rails - state_machine draw 抛出未初始化的常量错误

ruby-on-rails - 使用 Google 的 Audit API 监控 google 应用程序电子邮件

javascript - 添加 json2.js 时出现语法错误

go - 一个读取go文件并执行它的应用程序