2015-08-19 2 views
1

У меня есть struct в go, который содержит поле float64. Однако, когда я маршал значение этого поля на объект json, он дает мне экспоненциальное число. Основываясь на моем исследовании людей с похожими проблемами, я понимаю, что в объектах json это будет число, и в go будет float64, однако я не совсем понимаю, как читать фактическое число, а не float64. Вот пример моего кода.Маршал float64 на json в Go

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

Он показывает строку и float64 и с теми же значениями, и все, что я хочу это float64 быть правильно dislpayed на моем объекте JSon. Я нашел похожие вопросы на этом форуме, но ни один из них, похоже, не имеет прямого ответа. Все они кажутся обходными способами для меня и связаны с развязыванием объекта, а не наоборот.

+0

Может кто-нибудь, по крайней мере представить некоторые комментарии по поводу вниз голосов? Хотелось бы понять, почему мой вопрос не имеет значения или неясен? –

+1

Ваш вопрос в порядке, я сомневаюсь, что вы получите какие-либо комментарии о датах голосования. Не позволяйте им беспокоить вас. Добро пожаловать в StackOverflow;) – kostya

ответ

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

Смежные вопросы