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
Mary-Kate Olsenasal
2024-11-15 19:21:02757semak imbas

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"`
}

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!

Kenyataan:
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