首页 >后端开发 >Golang >在 Go 中将浮点数编组为 JSON 时如何保留尾随零?

在 Go 中将浮点数编组为 JSON 时如何保留尾随零?

Susan Sarandon
Susan Sarandon原创
2024-11-28 08:21:12489浏览

How Can I Preserve Trailing Zeros When Marshaling Floats to JSON in Go?

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
}

在此实现:

  • KeepZero 类型包装了 float64 类型。
  • MarshalJSON() 方法检查 float 是否为整数(没有小数部分)。如果是这样,它使用精度为 1 位小数的 strconv.FormatFloat() 函数来确保保留尾随零。
  • 否则,它使用精度 -1 来避免指定固定的小数位数places.

示例:

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn