在 Go 中将 float64 编组到 json

Jos*_*lli 1 json go

我有一个struct包含float64字段的 in go。然而,当我将此字段的值编组到 json 对象时,它给了我一个指数数。根据我对这里有类似问题的人的研究,我知道在 json 对象中它将是数字,在 go 中它将是 float64,但是我不太明白如何读取实际数字而不是 float64。这是我的代码示例。

http://play.golang.org/p/pR1B2oBKw2

它显示了一个字符串和一个 float64 ,两者都具有相同的值,我想要的只是在我的 json 对象上正确显示 float64 。我在这个论坛上发现了类似的问题,但似乎没有一个有直接的答案。对我来说,它们似乎都是解决方法,并且与解组对象有关,而不是相反。

One*_*One 5

短版,你不能。

长版?创建你自己的类型!

type FloatString float64

func (fs FloatString) MarshalJSON() ([]byte, error) {
    vs := strconv.FormatFloat(float64(fs), 'f', 2, 64)
    return []byte(`"` + vs + `"`), nil
}

func (fs *FloatString) UnmarshalJSON(b []byte) error {
    if b[0] == '"' {
        b = b[1 : len(b)-1]
    }
    f, err := strconv.ParseFloat(string(b), 64)
    *fs = FloatString(f)
    return err
}
Run Code Online (Sandbox Code Playgroud)

playground