登录
首页 >  Golang >  Go问答

停止 json.Marshal() 从浮点数中去除尾随零

来源:Golang技术栈

时间:2023-04-04 20:34:27 311浏览 收藏

golang学习网今天将给大家带来《停止 json.Marshal() 从浮点数中去除尾随零》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到golang等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

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

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

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

因此 JSON 输出应如下所示:

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

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

编辑:值 必须 是浮点数

正确答案

@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"} . 在操场上看看。

理论要掌握,实操不能落!以上关于《停止 json.Marshal() 从浮点数中去除尾随零》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>