Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekalkan Ketepatan Int64 Apabila Menghapuskan JSON dalam Go?
Kekalkan Nilai Int64 Apabila Menghuraikan JSON dalam Go
Pertimbangkan badan JSON berikut:
{"tags": [{"id": 4418489049307132905}, {"id": 4418489049307132906}]}
Apabila menggunakan json .Unmarshal() dalam Pergi untuk memproses JSON ini, nilai integer 64-bit (id) ialah sering ditukar kepada float64 kerana sifat penghurai JSON Go. Ini boleh menjadi masalah jika anda perlu mengekalkan ketepatannya.
Penyelesaian 1: Penyahkod Tersuai
Satu pendekatan ialah menggunakan penyahkod tersuai dan jenis json.Number. json.Number ialah jenis yang mewakili literal nombor JSON.
import ( "encoding/json" "fmt" "bytes" "strconv" ) func main() { body := []byte(`{"tags": [{"id": 4418489049307132905}, {"id": 4418489049307132906}]}`) dat := make(map[string]interface{}) d := json.NewDecoder(bytes.NewBuffer(body)) d.UseNumber() if err := d.Decode(&dat); err != nil { panic(err) } tags := dat["tags"].([]interface{}) n := tags[0].(map[string]interface{})["id"].(json.Number) i64, _ := strconv.ParseUint(string(n), 10, 64) fmt.Println(i64) // Prints 4418489049307132905 }
Penyelesaian 2: Struktur Tersuai
Pilihan lain ialah menyahkod JSON menjadi struktur tersuai yang secara khusus sepadan dengan format data anda.
import ( "encoding/json" "fmt" ) type A struct { Tags []map[string]uint64 // "tags" } func main() { body := []byte(`{"tags": [{"id": 4418489049307132905}, {"id": 4418489049307132906}]}`) var a A if err := json.Unmarshal(body, &a); err != nil { panic(err) } fmt.Println(a.Tags[0]["id"]) // Logs 4418489049307132905 }
Dalam penyelesaian ini, uint64 digunakan secara langsung dalam struktur, memastikan bahawa nilai integer 64-bit dipelihara.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Ketepatan Int64 Apabila Menghapuskan JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!