-2

我在将 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 {Count:map[FAN:0]} 类型的 Go struct 字段 Product.Count

4

1 回答 1

1

正如您自己注意到的那样,发生这种情况是因为您没有传入 JSON integer 58,而是 JSON string "58"

如果您将示例输入修改为

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

然后您的代码按预期工作

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

于 2019-10-09T15:20:15.043 回答