Golang Json Unmarshal Numeric with Exponent
Apabila menyahmarshaling rentetan JSON ke dalam struct dalam Golang, nilai angka dengan eksponen sering ditafsirkan sebagai 0 . Ini boleh menjadi satu cabaran, kerana eksponen adalah bahagian standard JSON spesifikasi.
Untuk menangani isu ini, jenis medan angka mesti diubah suai kepada float32 atau float64. Jenis titik terapung ini menyokong perwakilan eksponen. Contohnya:
type Person struct { Id float64 `json:"id"` _Id int64 Name string `json:"name"` }
Selepas menukar jenis, membuka rentetan JSON ke dalam struct akan menghuraikan nilai berangka dengan eksponen dengan betul.
Pendekatan Alternatif dengan Fungsi Pembantu
Jika anda memerlukan medan angka sebagai integer, anda boleh menggunakan pembantu fungsi untuk menghantar nilai titik terapung kepada jenis integer selepas unmarshaling:
import ( "encoding/json" "fmt" "math" "os" "reflect" ) 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"}`) func main() { _ = json.Unmarshal(b, &f) if reflect.TypeOf(f._Id) == reflect.TypeOf((int64)(0)) { fmt.Println(math.Trunc(f.Id)) f._Id = int64(f.Id) } }
Dalam contoh ini, fungsi pembantu matematik.Trunc memotong nilai titik terapung kepada integer. Nilai yang dipotong kemudiannya diberikan kepada medan _Id.
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshalkan Nilai Angka JSON dengan Eksponen di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!