我是 Go 新手,我正在连接到股票交易 Websocket,我的响应日志如下所示 map[data:[map[p:111.95 s:AAPL t:1.599838531053e+12 v:1]] type:trade] 如何访问内部值?我的代码看起来像 var msg interface{} // map[data:[ DATA ] type:trade] //DATA === map[p:117.18 s:AAPL t:1.599684492829e+12 v:200] for { err := w.ReadJSON(&msg) if err != nil { panic(err) } fmt.Println(msg) }示例 JSON{ "data":[{"p":7296.89,"s":"BINANCE:BTCUSDT","t":1575526691134,"v":0.011467}], "type":"trade" }如果我添加map[string]到接口,我可以通过做访问数据切片msg["data"],但是当我msg["data"][0]访问切片时,我得到一个编译器错误。我是菜鸟,所以如果这是一个愚蠢的问题,我深表歉意
1 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
正如问题评论所建议的,声明一个匹配 JSON 文档结构的 Go 类型:
type Message struct {
Data []struct {
P float64 `json:"p"`
S string `json:"s"`
T int64 `json:"t"`
V float64 `json:"v"`
} `json:"data"`
Type string `json:"type"`
}
解组为该类型的值:
for {
var msg Message
err := w.ReadJSON(&msg)
if err != nil {
panic(err)
}
fmt.Println(msg)
}
使用选择器和索引表达式访问字段:
fmt.Println(msg.Data[0])
- 1 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消