由 json 生成的 Golang 打印地图内部的地图.新解码器



我在这里使用答案从 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

最新更新