Rumah > pembangunan bahagian belakang > Golang > Mengapa Golang JSON Unmarshal Ralat Apabila Menghadapi Nilai Berangka dengan Eksponen?

Mengapa Golang JSON Unmarshal Ralat Apabila Menghadapi Nilai Berangka dengan Eksponen?

Mary-Kate Olsen
Lepaskan: 2024-11-15 19:21:02
asal
733 orang telah melayarinya

Why Does Golang JSON Unmarshal Error When Encountering Numeric Values with Exponents?

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"`
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan