首页 > 后端开发 > Golang > 为什么 Golang JSON 遇到带指数的数值时会出现 Unmarshal 错误?

为什么 Golang JSON 遇到带指数的数值时会出现 Unmarshal 错误?

Mary-Kate Olsen
发布: 2024-11-15 19:21:02
原创
739 人浏览过

Why Does Golang JSON Unmarshal Error When Encountering Numeric Values with Exponents?

Golang JSON 解组错误:指数值返回 0

在尝试将 JSON 数据解组到 Go 结构体时,用户遇到了带指数的数值始终被解释为 0 的问题。此行为源于预期类型与实际值之间的不匹配。

例如,如果像 {"id": 1.2e 8 这样的 JSON 字符串, "Name": "Fernando"} 将被解组为具有 uint64 类型的 Id 字段的结构体,结果 Id 将为 0。

解决方案

要解决此问题,请确保结构中字段的类型与 JSON 字符串中数据的类型匹配。在这种情况下,由于使用了指数,因此 Id 字段应定义为浮点类型,如 float32 或 float64。

替代解决方案

对于以下情况预期类型与 JSON 数字格式不兼容,可以实施解决方法。通过添加所需类型的“虚拟”字段,可以使用钩子将值转换为实际预期类型。

例如:

type Person struct {
    Id    float64          `json:"id"`
    _Id   int64             
    Name  string           `json:"name"`
}
登录后复制

解组 JSON 数据后在 Person 结构中,可以添加条件检查以将 Id 字段转换为 int64。

var f Person
var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`)
_ = json.Unmarshal(b, &f)

if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) {
    fmt.Println(f.Id)
    f._Id = int64(f.Id)
}
登录后复制

这种 hacky 方法允许将浮点 Id 字段转换为所需的 int64 类型。

以上是为什么 Golang JSON 遇到带指数的数值时会出现 Unmarshal 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板