JSON マーシャルと浮動小数点数の末尾ゼロ
問題:
浮動小数点数を JSON にマーシャリングするときjson.Marshal() を使用すると、末尾のゼロが削除される可能性があります。外部プログラムで JSON を解析するときに問題が発生します。
解決策:
JSON 出力の末尾のゼロを保持するには、カスタム float 型とカスタム MarshalJSON() メソッドを提供します。
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) }
この例では、目的の JSON 出力が生成されます:
{"Value":40.0,"Unit":"some_string"}
以上がGo でフロートを JSON にマーシャリングするときに末尾のゼロを保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。