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

Bri*_*ian 1 json decoder go

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

我怀疑这是因为我的struct的结构与返回的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"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试的:

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)
Run Code Online (Sandbox Code Playgroud)

编辑:Per @Leo的回答和@ JimB的提示,我的尝试有两个问题.下面是正确的结构集,尽管Leo指出,这将是空的:

type SynonymResponses struct {
    resp []SynonymResponse
}

type SynonymResponse struct {
    listo SynonymList
}

type SynonymList struct {
    cat string
    syns string
} 
Run Code Online (Sandbox Code Playgroud)

Leo*_*rea 6

为了让解码器选择JSON,必须导出结构中的字段.

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

这将解决您的问题:

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

type SynonymList struct {
    Category string `json:"category"`
    Synonyms string `json:"synonyms"`
}
Run Code Online (Sandbox Code Playgroud)