【发布时间】:2013-05-21 15:42:38
【问题描述】:
我正在用 Go 编写一个 websocket 客户端。我从服务器收到以下 JSON:
{"args":[{"time":"2013-05-21 16:57:17"}],"name":"send:time"}
我正在尝试访问 time 参数,但无法掌握如何深入了解接口类型:
package main;
import "encoding/json"
import "log"
func main() {
msg := `{"args":[{"time":"2013-05-21 16:56:16", "tzs":[{"name":"GMT"}]}],"name":"send:time"}`
u := map[string]interface{}{}
err := json.Unmarshal([]byte(msg), &u)
if err != nil {
panic(err)
}
args := u["args"]
log.Println( args[0]["time"] ) // invalid notation...
}
这显然是错误的,因为符号不正确:
invalid operation: args[0] (index of type interface {})
我只是找不到一种方法来挖掘地图以获取深度嵌套的键和值。
一旦我能够克服抓取动态值的问题,我想声明这些消息。如何编写类型结构来表示如此复杂的数据结构?
【问题讨论】:
-
返回的 JSON 是否总是有相同的字段?
-
是的,基本一样。
-
那么你真的应该使用@cthom06 建议的关于定义与数据匹配的结构。从长远来看,这会让事情变得更容易,因为您会知道每个字段的类型。
标签: go