Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengekalkan Sifar Mengekor dalam Output JSON untuk Nombor Titik Terapung Go?

Bagaimana untuk Mengekalkan Sifar Mengekor dalam Output JSON untuk Nombor Titik Terapung Go?

DDD
Lepaskan: 2024-11-28 11:56:14
asal
474 orang telah melayarinya

How to Preserve Trailing Zeros in JSON Output for Go's Floating-Point Numbers?

Memelihara Sifar Pengesanan dalam Output JSON untuk Nombor Titik Terapung

Dalam Go, fungsi json.Marshal() biasanya digunakan untuk bersiri struktur data ke dalam format JSON. Walau bagaimanapun, ia mempunyai kecenderungan untuk menanggalkan sifar mengekor daripada nombor titik terapung semasa proses penukaran. Ini boleh menjadi masalah jika aplikasi yang menggunakan menjangkakan nombor tersebut mempunyai sifar di belakang.

Untuk menangani isu ini, satu pendekatan ialah mencipta jenis titik terapung tersuai yang melaksanakan antara muka json.Marshaler. Ini membolehkan anda menentukan cara jenis itu disiri ke dalam JSON. Berikut ialah contoh pelaksanaan:

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
}
Salin selepas log masuk

Dalam kod ini:

  • Jenis KeepZero ialah jenis titik terapung baharu yang membalut jenis float64 asli.
  • Kaedah MarshalJSON melaksanakan antara muka json.Marshaler untuk jenis KeepZero.
  • The Fungsi strconv.FormatFloat digunakan untuk memformat nombor titik terapung sebagai rentetan. Jika nombor itu ialah integer (iaitu, ia tidak mempunyai bahagian pecahan), rentetan diformatkan dengan satu tempat perpuluhan untuk mengekalkan sifar di belakang. Jika tidak, rentetan diformatkan tanpa titik perpuluhan tetap.

Untuk menggunakan jenis KeepZero, anda boleh menggantikan medan float64 asal dalam struktur data anda dengan medan KeepZero. Contohnya:

type Pt struct {
    Value KeepZero
    Unit  string
}
Salin selepas log masuk

Apabila anda memanggil json.Marshal pada objek Pt, medan Nilai akan disiri menggunakan kaedah MarshalJSON tersuai, mengekalkan sifar di belakang jika perlu.

data, err := json.Marshal(Pt{40.0, "some_string"})
fmt.Println(string(data), err)
Salin selepas log masuk

Ini akan menghasilkan output JSON berikut:

{"Value":40.0,"Unit":"some_string"}
Salin selepas log masuk

Penyelesaian ini membolehkan anda mengekalkan sifar tertinggal dalam anda nombor terapung apabila mensirikannya kepada JSON, seperti yang diperlukan oleh aplikasi yang menggunakan.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Sifar Mengekor dalam Output JSON untuk Nombor Titik Terapung Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan