【发布时间】:2015-12-02 05:38:13
【问题描述】:
我需要创建一个结构来解组和访问键“name”并接收它的值。
{
"product":"car",
"spec":[
{
"name":"bla_bla",
"info":{
"color":"black",
"year":1991
}
}
]
}
这是我的结构现在的样子:
type Products struct {
Product string `json:"product"`
Specs []Spec `json:"spec"`
}
type Spec struct {
Name string `json:"name"`
Info Inf `json:"info"`
}
type Inf struct {
Color string `json:"color"`
Year int `json:"year"`
}
使用这个结构我只能访问Products.Product,Products.Specs 只显示[ ]。
我检查了来自 websocket 的 json.unmarshal 错误和原始响应,我发现我的 json 字符串看起来有点不同。
c := `{"product":"car","spec":["{\"name\":\"bla_bla\",\"info\":{\"color\":\"black\",\"year\":\"1991\"}}"]}`
我用字符串替换了一些字符和解码器。现在它可以按照我想要的方式工作了。
s_replacer := strings.NewReplacer(`"{`, "{", `"]`, "]", "\\", "")
z := s_replacer.Replace(c)
dec := json.NewDecoder(strings.NewReader(z))
for {
var m Products
if err := dec.Decode(&m); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
fmt.Println(m.Specs[0].Name)
}
我认为问题在于方括号中的引号将其视为字符串数组。无论如何,感谢您的回复,我对 golang 还是很陌生。
【问题讨论】:
-
我觉得很好,你是如何解组的?
-
解组前可以查看
len(Products.Specs) -
LGTM。 play.golang.org/p/f1qs5MPRrx 。您可以从 mholt.github.io/json-to-go 生成您的结构
标签: data-structures go