Golang Json Unmarshal Numeric with Exponent
在 Golang 中将 JSON 字符串解组到结构体时,带指数的数值通常被解释为 0这可能是一个挑战,因为指数是 JSON 的标准部分。
要解决此问题,必须将数值字段的类型修改为 float32 或 float64。这些浮点类型支持指数的表示。例如:
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` }
更改类型后,将 JSON 字符串解组到结构中将正确解析带有指数的数值。
使用辅助函数的替代方法
如果您要求数字字段为整数,您可以使用辅助函数来转换解组后将浮点值转换为整数类型:
import ( "encoding/json" "fmt" "math" "os" "reflect" ) type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` } var f Person var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`) func main() { _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(math.Trunc(f.Id)) f._Id = int64(f.Id) } }
在此示例中,辅助函数 math.Trunc 将浮点值截断为整数。然后将截断的值分配给 _Id 字段。
以上是如何在 Golang 中用指数解组 JSON 数值?的详细内容。更多信息请关注PHP中文网其他相关文章!