首页 > 其他分享 >golang中json.Marshal自定义浮点数格式化样式

golang中json.Marshal自定义浮点数格式化样式

时间:2022-10-15 21:25:06浏览次数:45  
标签:自定义 浮点数 QpsObj golang json key Qps qps byte

golang中如果有以下的类型

type QpsObj struct {
    Key string  `json:"key"`
    Qps float64 `json:"qps"`
}

json.Marshal后会输出如下的字符串 {"key":"test","qps":115.22333333333333}

如果Qps字段只想保存小数点后两位该如何做呢?

一种是实现如下方法

func (j *QpsObj) MarshalJSON() ([]byte, error) {
    return []byte(fmt.Sprintf(`{"key":"%v", "qps":"%0.2f"}`, j.Key, j.Qps)), nil
}

输出 {"key":"test","qps":"115.22"} 

但如果QpsObj中的字段更多,这种方式就不现实。

思考一阵后想到可以重定义float64类型。代码如下

type MyFloat float64

func (f MyFloat) MarshalJSON() ([]byte, error) {
    return []byte(fmt.Sprintf("%0.2f", f)), nil
}

type QpsObj struct {
    Key string  `json:"key"`
    Qps MyFloat `json:"qps"`
}

输出 {"key":"test","qps":"115.22"}

euraka

标签:自定义,浮点数,QpsObj,golang,json,key,Qps,qps,byte
From: https://www.cnblogs.com/xiangism/p/16795057.html

相关文章