Go-JSON解码器未初始化我的结构

Go-JSON解码器未初始化我的结构,json,go,decoder,Json,Go,Decoder,我正在尝试解码通过http.Get检索到的一些JSON。但是,当我检查用fmt.Println初始化的结构时,它们总是空的 我怀疑这是因为我的结构与返回的JSON不一致,但我不确定如何修复它。总的来说,我不太清楚这个系统是如何工作的 这是JSON: { "response":[ { "list": { "category":"(noun)", "synonyms":"histrion|player|thespian|role player|

我正在尝试解码通过http.Get检索到的一些JSON。但是,当我检查用fmt.Println初始化的结构时,它们总是空的

我怀疑这是因为我的结构与返回的JSON不一致,但我不确定如何修复它。总的来说,我不太清楚这个系统是如何工作的

这是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)
编辑:根据@Leo的回答和@JimB的提示,我的尝试有两个问题。下面是正确的结构集,但正如Leo指出的,这将是空的:


为了让解码器提取JSON,必须导出结构中的字段

这意味着您需要将字段名大写。如果在字段->json转换中有自定义命名,则可以将json标记添加到结构中

这将解决您的问题:

type SynonymResponse struct {
    Lists []SynonymList `json:"response"`
}

type SynonymList struct {
    Category string `json:"category"`
    Synonyms string `json:"synonyms"`
}

为了让解码器提取JSON,必须导出结构中的字段

这意味着您需要将字段名大写。如果在字段->json转换中有自定义命名,则可以将json标记添加到结构中

这将解决您的问题:

type SynonymResponse struct {
    Lists []SynonymList `json:"response"`
}

type SynonymList struct {
    Category string `json:"category"`
    Synonyms string `json:"synonyms"`
}

我已经实现了您建议的更改,但仍然有空结构:{[{}{}]}@BrianVanover,您的json是一个包含响应字段的对象,而不是同义词响应本身。@JimB谢谢您的提示!我必须再创建一层结构。我将在我的问题中添加它以供将来参考。我已经实现了您建议的更改,但我仍然有空结构:{[{}{}]}@BrianVanover,您的json是一个包含响应字段的对象,而不是同义词响应本身。@JimB感谢您的提示!我必须再创建一层结构。我会把它加入我的问题中,以备将来参考。