Go

时间:2015-08-19 01:51:37

标签: json go

我的广告struct包含float64字段。但是当我将这个字段的值编组到一个json对象上时,它给出了一个指数。 基于我对这里有类似问题的人的研究,我明白在json对象中它将是数字,并且在go中它将是一个float64,但是我不太明白如何读取实际数字而不是float64。 这是我的代码示例。

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

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

1 个答案:

答案 0 :(得分:4)

简短版本,你可以

长版?创建自己的类型!

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
}

playground