Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengekalkan Sifar Mengekori dalam JSON Marshaling Nombor Titik Terapung Go?
JSON Marshaling: Mengekalkan Sifar Mengekor dalam Nombor Titik Terapung
Apabila mensiri data ke dalam JSON menggunakan json.Marshal() dalam Go, mengekor sifar dalam nombor titik terapung sering dilucutkan. Ini boleh menjadi masalah apabila hujung penerima menjangkakan nilai titik terapung dengan tempat perpuluhan.
Penyelesaian: Fungsi Marshal Tersuai
Cara yang berkesan untuk menghalang json.Marshal() daripada mengalih keluar sifar mengekor adalah untuk menentukan kaedah MarshalJSON() tersuai untuk jenis yang mengandungi nilai titik terapung. Ini membolehkan anda mengawal proses bersiri secara manual.
Pertimbangkan contoh berikut:
type MyFloat float64 func (f MyFloat) MarshalJSON() ([]byte, error) { // Check if the float is an integer (no decimal part). if math.Trunc(float64(f)) == float64(f) { // Serialize as an integer without the trailing zero. return []byte(strconv.FormatInt(int64(f), 10)), nil } // Serialize as a floating-point number with the trailing zero. return []byte(strconv.FormatFloat(float64(f), 'f', -1, 64)), nil }
Dalam contoh ini, jenis MyFloat mentakrifkan kaedah MarshalJSON() tersuai yang menyemak sama ada apungan itu integer (tiada bahagian perpuluhan) dan mensirikannya dengan sewajarnya. Untuk nombor titik terapung, ia mensirikannya dengan sifar pengekoran utuh.
Penggunaan:
Setelah anda menentukan kaedah MarshalJSON() tersuai, anda boleh menggunakannya untuk menyerikan objek yang mengandungi jenis MyFloat. Contohnya:
type MyStruct struct { Value MyFloat Unit string } // Serialize MyStruct using the custom MarshalJSON method. data, err := json.Marshal(MyStruct{40.0, "some_string"})
Ini akan menghasilkan output JSON berikut:
{ "Value": 40.0, "Unit": "some_string" }
Nota:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Sifar Mengekori dalam JSON Marshaling Nombor Titik Terapung Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!