Json 如何使用Golang从websocket读取值

Json 如何使用Golang从websocket读取值,json,go,websocket,Json,Go,Websocket,我是新手,正在连接股票交易Websocket,我的回复日志如下 map[数据:[map[p:111.95 s:AAPL t:1.599838531053e+12 v:1]]类型:交易] 如何访问内部值? 我的代码看起来像 var msg interface{} // map[data:[ DATA ] type:trade] //DATA === map[p:117.18 s:AAPL t:1.599684492829e+12 v:200] for {

我是新手,正在连接股票交易Websocket,我的回复日志如下
map[数据:[map[p:111.95 s:AAPL t:1.599838531053e+12 v:1]]类型:交易]
如何访问内部值?
我的代码看起来像

    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
{“数据”:[{“p”:7296.89,“s”:“二进制:BTCUSDT”,“t”:1575526691134,“v”:0.011467}],“类型”:“贸易”}

如果我将
map[string]
添加到接口,我可以通过执行
msg[“data”]
来访问数据片,但是当我执行
msg[“data”][0]
访问数据片时,我会收到一个编译器错误


我是一个go noob,因此如果这是一个愚蠢的问题,我深表歉意。

如问题注释所示,声明一个与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])

@I固定的反反射柱