我无法弄清楚如何在Go中解码这个JSON。地图返回nil。 Unmarshal从内存开始工作,但最终我可能需要一个流。另外,我需要获得Foo,Bar和Baz的关键名称。不确定那个。
JSON:
{
"Foo" : {"Message" : "Hello World 1", "Count" : 1},
"Bar" : {"Message" : "Hello World 2", "Count" : 0},
"Baz" : {"Message" : "Hello World 3", "Count" : 1}
}
代码:
package main
import (
"encoding/json"
"fmt"
"os"
)
type Collection struct {
FooBar map[string]Data
}
type Data struct {
Message string `json:"Message"`
Count int `json:"Count"`
}
func main() {
//will be http
file, err := os.Open("stream.json")
if err != nil {
panic(err)
}
decoder := json.NewDecoder(file)
var c Collection
err = decoder.Decode(&c)
if err != nil {
panic(err)
}
for key, value := range c.FooBar {
fmt.Println("Key:", key, "Value:", value)
}
//returns empty map
fmt.Println(c.FooBar)
}
答案 0 :(得分:3)
您不需要顶级结构,直接解码到地图中:
err = decoder.Decode(&c.FooBar)
或者,只需删除结构:
type Collection map[string]Data
使用顶级结构,隐含格式为:
{
"FooBar": {
"Foo" : {"Message" : "Hello World 1", "Count" : 1},
"Bar" : {"Message" : "Hello World 2", "Count" : 0},
"Baz" : {"Message" : "Hello World 3", "Count" : 1}
}
}