在业余时间玩Golang。尝试执行典型的Web任务:从GET请求中获取json并打印其值。
type Weather struct {
name string
}
// some code
decoder := json.NewDecoder(res.Body)
for {
var weather Weather
if err := decoder.Decode(&weather); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
fmt.Println(weather.name)
}
JSON:
{"coord":{"lon":145.77,"lat":-16.92},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}],"base":"stations","main":{"temp":300.15,"pressure":1007,"humidity":74,"temp_min":300.15,"temp_max":300.15},"visibility":10000,"wind":{"speed":2.6,"deg":260},"clouds":{"all":20},"dt":1455633000,"sys":{"type":1,"id":8166,"message":0.0314,"country":"AU","sunrise":1455567124,"sunset":1455612583},"id":2172797,"name":"Cairns","cod":200}
据我所知,我需要声明一个结构来获取json值,但它什么都不打印。我的错是什么?
如果我需要使用未知字段操作json怎么办?有没有办法直接从json构建地图?
答案 0 :(得分:1)
您的姓名'您的Weather
结构中的字段未导出。必须为其他包导出字段类型才能看到它们(因此,解组/解码它们):https://tour.golang.org/basics/3
您也可以使用struct标签将Go字段名称映射到JSON键:
type Weather struct {
Name string `json:"name"`
}
...并且将来,您可以使用https://mholt.github.io/json-to-go/从JSON自动生成Go结构。