我在这里使用答案从 API 中获取一些 json:
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
func main() {
resp, err := http.Get("http://api.openweathermap.org/data/2.5/forecast?id=524901&appid=1234")
if err != nil {
log.Fatal(err)
}
var generic map[string]interface{}
err = json.NewDecoder(resp.Body).Decode(&generic)
if err != nil {
log.Fatal(err)
}
fmt.Println(generic)
}
它正在工作,我有一个存储在 generic
变量中的 json 映射。
当我打印时:
fmt.Println(generic["city"])
我回来了:
map[id:524901 name:Moscow coord:map[lon:37.615555 lat:55.75222] country:RU population:0 sys:map[population:0]]
现在我想访问城市名称。我正在尝试以下方法:
fmt.Println(generic["city"]["name"])
我得到错误:
muxTest/router.go:30:无效操作:通用["城市"]["名称"](类型 接口 {} 不支持索引)
还尝试了generic["city"].name
不起作用。
如何访问城市名称值?
你需要将map[string]interface{}
的interface{}
投射到更有用的东西上。 在这种情况下,再次map[string]interface{}
,因为city
本身就是一张地图。 您无法将其转换为其他任何内容,因为coord
也是地图,因此无法将城市转换为map[string]string
。
https://play.golang.org/p/bGsYLnSAK4