Apabila menyahmarshaling data JSON ke dalam struktur Go, nilai angka dengan eksponen sering disalahtafsirkan sebagai sifar. Ini berlaku apabila medan sasaran dalam struktur diisytiharkan sebagai jenis integer.
Untuk menangani isu ini, ikut langkah berikut:
type Person struct { Id float32 `json:"id"` Name string `json:"name"` }
Berikut ialah contoh:
package main import ( "encoding/json" "fmt" "os" ) type Person struct { Id float32 `json:"id"` Name string `json:"name"` } func main() { // Create the JSON string. var b = []byte(`{"id": 1.2E+8, "Name": "Fernando"}`) // Unmarshal the JSON to a proper struct. var f Person json.Unmarshal(b, &f) // Print the person. fmt.Println(f) // Unmarshal the struct to JSON. result, _ := json.Marshal(f) // Print the JSON. os.Stdout.Write(result) }
Ini akan menghasilkan:
{1.2e+08 Fernando} {"id":1.2e+08,"Name":"Fernando"}
Pendekatan Alternatif:
Jika anda mesti menggunakan jenis integer untuk medan, anda boleh menggunakan medan "dummy" jenis float64 untuk menangkap nilai angka dengan eksponen. Kemudian, gunakan cangkuk untuk menghantar nilai kepada jenis integer sebenar.
Berikut ialah contoh:
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` } var f Person var b = []byte(`{"id": 1.2e+8, "Name": "Fernando"}`) _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(f.Id) f._Id = int64(f.Id) }
Ini akan menghasilkan:
1.2e+08 {Name:Fernando Id:120000000}
Atas ialah kandungan terperinci Bagaimana Mengendalikan Nombor JSON dengan Eksponen dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!