json - 使用 JSON 解码 map[string]int64 的 Go 中的问题

标签 json dictionary parsing go

我在将 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: cannot unmarshal string into Go struct field Product.Count of type int64 {Count:map[FAN:0]}

最佳答案

正如您自己所注意到的,这是因为您没有传入 JSON 整数 58。 ,而是一个 JSON 字符串 "58" .

如果您将示例输入修改为

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

那么你的代码 works as expected .

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

关于json - 使用 JSON 解码 map[string]int64 的 Go 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58307298/

相关文章:

c# 将字符串表达式转换为 bool 表达式

java - 在将应用程序迁移到 Spring Boot 后使用 Spring Data Rest 时,我观察到带有 @Id 的实体属性不再编码为 JSON

ios - UITableView数组返回错误 'index 0 beyond bounds for empty array'

python - 将带有列表的循环输出保存到 Python 中的字典中

python - 如何防止通过 for 循环覆盖字典中的数据

java - 将查询字符串参数解析为 java 对象

python - 如何使用 beautifulsoup 提取嵌套标签结构中的属性值?

php - 直接从 PHP 将 JSON 插入 MongoDb

arrays - 使用 jq,如何在不更新所有其他对象的情况下将元素 append 到数组?

python解压列表字典