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中文网其他相关文章!