JSON 编组和浮点数尾随零
问题:
将浮点数编组为 JSON 时使用 json.Marshal(),尾随零被删除,可能会导致问题使用外部程序解析 JSON 时。
解决方案:
要保留 JSON 输出中的尾随零,一种方法是定义自定义 float 类型并提供为其自定义 MarshalJSON() 方法。
type KeepZero float64 func (f KeepZero) MarshalJSON() ([]byte, error) { if float64(f) == float64(int(f)) { return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil } return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil }
在此实现:
示例:
type Pt struct { Value KeepZero Unit string } func main() { data, err := json.Marshal(Pt{40.0, "some_string"}) fmt.Println(string(data), err) }
此示例将生成所需的 JSON 输出:
{"Value":40.0,"Unit":"some_string"}
以上是在 Go 中将浮点数编组为 JSON 时如何保留尾随零?的详细内容。更多信息请关注PHP中文网其他相关文章!