【问题标题】:Issues in Go with JSON unmarshal of map[string]int64使用 JSON 解组 map[string]int64 的 Go 中的问题
【发布时间】:2020-02-06 23:27:08
【问题描述】:

我在将 JSON 解组为 Go 结构时遇到问题。显然问题的根源是不稳定的——int64 的字符串即将到来,除了我没有找到解决它的方法而不将 Count 的数据类型更改为 map[string]string。我在 SO 上看到了类似的讨论,但它们并没有太大帮助。这是一个有代表性的代码和问题。请建议我如何通过。

type Product struct {
    Count  map[string]int64 `json:",string"`
}

func main() {
    s := `{"count":{"FAN":"58"}}`

    var pro Product
    err := json.Unmarshal([]byte(s), &pro)
    if err == nil {
        fmt.Printf("%+v\n", pro)
    } else {
        fmt.Println(err)
        fmt.Printf("%+v\n", pro)
    }
}

输出:

json:无法将字符串解组为 int64 类型的 Go struct 字段 Product.Count {计数:地图[FAN:0]}

【问题讨论】:

标签: json dictionary parsing go


【解决方案1】:

正如您自己所指出的,发生这种情况是因为您没有传入 JSON 整数 58,而是传入 JSON 字符串 "58"

如果您将示例输入修改为

s := `{"count":{"FAN":58}}`

然后你的代码works as expected

您可以编写自定义解组器,但在解组时解决问题可能不是您想要的;而是找到一种方法来修改您的数据管道并确保正确清理 JSON 对象。或者,如果这不可能,请按照您自己的建议使用 map[string]string,然后在解组后修复数据类型。

【讨论】:

  • 谢谢。是的,改变结构似乎是要走的路。
猜你喜欢
  • 2012-06-15
  • 1970-01-01
  • 2019-09-04
  • 2018-08-19
  • 2021-09-18
  • 1970-01-01
  • 2016-06-14
  • 1970-01-01
  • 2022-09-23
相关资源
最近更新 更多