Golang JSON Unmarshal Error: Nilai Numerik dengan Exponent Return 0
Semasa cuba menyahmarshal data JSON ke dalam struct Go, pengguna telah menemui isu di mana nilai berangka dengan eksponen secara konsisten ditafsirkan sebagai 0. Tingkah laku ini berpunca daripada ketidakpadanan antara jenis yang dijangkakan dan nilai sebenar.
Sebagai contoh, jika rentetan JSON seperti {"id": 1.2e 8, "Nama": "Fernando"} akan dinyahmarshalkan menjadi struct dengan medan Id jenis uint64, Id yang terhasil ialah 0.
Penyelesaian
Untuk menyelesaikan isu ini, pastikan jenis medan dalam struct sepadan dengan jenis data dalam rentetan JSON. Dalam kes ini, memandangkan eksponen digunakan, medan Id hendaklah ditakrifkan sebagai jenis titik terapung seperti float32 atau float64.
Penyelesaian Alternatif
Untuk situasi di mana jenis yang dijangkakan tidak serasi dengan format angka JSON, penyelesaian boleh dilaksanakan. Dengan menambahkan medan "dummy" daripada jenis yang diingini, cangkuk boleh digunakan untuk menghantar nilai kepada jenis yang dijangkakan.
Contohnya:
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` }
Selepas menyahmarshall data JSON ke dalam struct Person, semakan bersyarat boleh ditambah untuk menghantar medan Id ke int64.
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) }
Godam ini pendekatan membenarkan penukaran medan Id titik terapung kepada jenis int64 yang dikehendaki.
Atas ialah kandungan terperinci Mengapa Golang JSON Unmarshal Ralat Apabila Menghadapi Nilai Berangka dengan Eksponen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!