JSON Marshal dan Float Trailing Zeros
Masalah:
Apabila menyusun nombor apungan ke JSON menggunakan json.Marshal(), sifar di belakang dilucutkan, berpotensi menyebabkan masalah apabila menghuraikan JSON dengan program luaran.
Penyelesaian:
Untuk mengekalkan sifar di belakang dalam output JSON, satu pendekatan adalah untuk menentukan jenis apungan tersuai dan menyediakan MarshalJSON() tersuai kaedah untuknya.
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 }
Dalam pelaksanaan ini:
Contoh:
type Pt struct { Value KeepZero Unit string } func main() { data, err := json.Marshal(Pt{40.0, "some_string"}) fmt.Println(string(data), err) }
Contoh ini akan menghasilkan output JSON yang dikehendaki:
{"Value":40.0,"Unit":"some_string"}
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Sifar Mengekori Apabila Marshaling Terapung ke JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!