gpt4 book ai didi

json - 停止 json.Marshal() 从 float 中去除尾随零

转载 作者:IT王子 更新时间:2023-10-29 01:25:53 27 4
gpt4 key购买 nike

我遇到了以下问题:我的 golang 程序将一些信息转换为 JSON。例如,它会产生以下 json:

{
"value":40,
"unit":"some_string"
}

问题是值的“输入”是 40.0,并且编码会去除尾随零。如果读取 JSON 的 EPL 能够在没有 .0 的情况下将 40 读取为 float ,那就没问题了

因此 JSON 输出应该如下所示:

{
"value":40.0,
"unit":"some_string"
}

是否有可能“阻止”json.Marshal() 删除零?

编辑:值必须是一个 float

最佳答案

@icza 提供了一个很好的答案,但只是为了提供另一种选择,您可以定义自己的 float 类型并为其定义自己的序列化。像这样

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)
}

这导致 {"Value":40.0,"Unit":"some_string"} <nil> . Check it out in playground.

关于json - 停止 json.Marshal() 从 float 中去除尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52446730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com