Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekalkan Ketepatan Integer 64-Bit Apabila Menghuraikan JSON dalam Go?
Kekalkan Nilai Integer 64-Bit semasa Penghuraian JSON dalam Go
Dalam Go, menghuraikan data JSON yang mengandungi nilai integer 64-bit boleh mengakibatkan penukaran mereka kepada nilai float64, yang membawa kepada kehilangan ketepatan. Artikel ini menangani isu ini dengan mengemukakan dua penyelesaian untuk mengekalkan nilai integer asal semasa penghuraian JSON.
Penyelesaian 1: Menggunakan Penyahkod dan UseNumber
Dengan menggunakan UseNumber jenis Penyahkod kaedah, seseorang boleh mengarahkan penyahkod untuk merawat nilai berangka sebagai objek json.Nombor dan bukannya float64 nilai. json.Number boleh ditukar dengan mudah kepada jenis uint64 atau int64 menggunakan fungsi ParseUint atau ParseInt masing-masing.
Contoh:
import ( "encoding/json" "bytes" "fmt" "strconv" ) body := []byte(`{"tags":[{"id":4418489049307132905},{"id":4418489049307132906}]}`) d := json.NewDecoder(bytes.NewBuffer(body)) d.UseNumber() var dat map[string]interface{} err := d.Decode(&dat) tags := dat["tags"].([]interface{}) value := tags[0].(map[string]interface{})["id"].(json.Number) id, _ := strconv.ParseUint(string(value), 10, 64) fmt.Println(id) // Prints 4418489049307132905
Penyelesaian 2: Menyahkod ke dalam Custom Struktur
Mentakrifkan struktur tersuai yang sepadan dengan struktur data JSON membenarkan penugasan terus nilai integer kepada medan integer. Ini menghapuskan keperluan untuk penukaran atau manipulasi data selanjutnya.
Contoh:
import ( "encoding/json" "fmt" ) type Tag struct { Id uint64 `json:"id"` } type Data struct { Tags []Tag `json:"tags"` } body := []byte(`{"tags":[{"id":4418489049307132905},{"id":4418489049307132906}]}`) var data Data json.Unmarshal(body, &data) fmt.Println(data.Tags[0].Id) // Logs 4418489049307132905
Awas:
Jika data JSON berasal daripada sumber yang menggunakan JavaScript, perlu diingat bahawa JavaScript hanya menyokong apungan berketepatan ganda IEEE754 nilai dan tidak mempunyai integer 64-bit yang benar. Ini bermakna menghuraikan data JSON sedemikian dalam JavaScript akan mengakibatkan kehilangan ketepatan, tanpa mengira kaedah yang digunakan dalam Go.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Ketepatan Integer 64-Bit Apabila Menghuraikan JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!