为了账号安全,请及时绑定邮箱和手机立即绑定

golang 解组 websocket-rails JSON 响应

golang 解组 websocket-rails JSON 响应

Go
猛跑小猪 2021-09-27 14:14:20
[    [        "client_connected",         {            "id": null,            "channel": null,            "user_id": null,            "data": {               "connection_id": null            },            "success": null,            "result": null,            "server_token": null        }       ]]鉴于来自websocket-rails服务器的这个 JSON 响应,我想知道解析它的最佳方法是什么,因为有一个没有任何键的字符串?
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

这不是最好的解决方案,但它是最简单的:


由于 JSON 输入不是方便的键值对(或它的数组),我们不能只使用简单的struct(这是可取的)来建模内容。


您的 JSON 输入是一个数组数组。里面有混合类型,所有类型都可以存储在空接口中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{}

它也可以工作,但在这种情况下,我们甚至需要类型断言才能到达“包装器”数组的元素,这将是一个后退。


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信