我正在尝试解码通过http.Get
检索到的一些JSON。但是,当我检查我使用fmt.Println
初始化的结构时,它们总是空的。
我怀疑是因为我的struct结构与返回的JSON不一致,但我不知道如何解决它。一般来说,我并不完全确定decoder的工作原理。
这是JSON:
{
"response":[
{
"list": {
"category":"(noun)",
"synonyms":"histrion|player|thespian|role player|performer|performing artist"
}
},
{
"list": {
"category":"(noun)",
"synonyms":"doer|worker|person|individual|someone|somebody|mortal|soul"
}
}
]
}
这是我到目前为止所尝试的内容:
type SynonymResponse struct {
lists []SynonymList
}
type SynonymList struct {
category string
synonyms string
}
var synonyms SynonymResponse;
dec := json.NewDecoder(response.Body)
err := dec.Decode(&synonyms)
if err != nil {
log.Fatal(err)
}
fmt.Println(synonyms)
编辑:Per @Leo的回答和@ JimB的提示,我的尝试有两个问题。下面是正确的结构集,尽管Leo指出,这将是空的:
type SynonymResponses struct {
resp []SynonymResponse
}
type SynonymResponse struct {
listo SynonymList
}
type SynonymList struct {
cat string
syns string
}
答案 0 :(得分:6)
为了让解码器选择JSON,必须导出结构中的字段。
这意味着您需要大写字段名称。如果您在字段上有自定义命名 - > json转换,您可以将json标记添加到结构中。
这将解决您的问题:
type SynonymResponse struct {
Lists []SynonymList `json:"response"`
}
type SynonymList struct {
Category string `json:"category"`
Synonyms string `json:"synonyms"`
}