【问题标题】:Go - JSON Decoder not initializing my structGo - JSON 解码器没有初始化我的结构
【发布时间】:2016-04-14 07:19:13
【问题描述】:

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

我怀疑这是因为我的结构的结构与返回的 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)

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

type SynonymResponses struct {
    resp []SynonymResponse
}

type SynonymResponse struct {
    listo SynonymList
}

type SynonymList struct {
    cat string
    syns string
} 

【问题讨论】:

    标签: json go decoder


    【解决方案1】:

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

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

    这将解决您的问题:

    type SynonymResponse struct {
        Lists []SynonymList `json:"response"`
    }
    
    type SynonymList struct {
        Category string `json:"category"`
        Synonyms string `json:"synonyms"`
    }
    

    【讨论】:

    • 我已经实现了您建议的更改,但我仍然有空结构:{[{ } { }]}
    • @BrianVanover,您的 json 是一个包含“响应”字段的对象,而不是 SynonymResponse 本身。
    • @JimB 感谢您的提示!我不得不再创建一层结构。我会在我的问题中添加它以供将来参考。
    猜你喜欢
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多