gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:12:20 32 4
gpt4 key购买 nike

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

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

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

因此 JSON 输出应如下所示:
{
"value":40.0,
"unit":"some_string"
}

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

编辑:值 必须做一个 float

最佳答案

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

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/63980541/

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