从json.Decoder获取键和值

时间:2016-02-16 15:25:38

标签: json go

在业余时间玩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构建地图?

1 个答案:

答案 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结构。