Bagaimana untuk Menyahmarshalkan Nilai Angka JSON dengan Eksponen dalam Go?

Patricia Arquette
Lepaskan: 2024-11-15 13:59:03
asal
192 orang telah melayarinya

How to Unmarshal JSON Numeric Values with Exponents in Go?

JSON Unmarshal of Numeric Values ​​with Exponent

Pengguna Golang mungkin menghadapi kesukaran apabila cuba menyahmarshal rentetan JSON ke dalam struktur Go yang mengandungi nilai angka dengan eksponen . Secara lalai, Go salah tafsir nilai ini, mengakibatkan kehilangan ketepatan.

Demonstrasi Masalah

Pertimbangkan kod Go berikut:

type Person struct {
    Id   uint64  `json:"id"`
    Name string `json:"name"`
}

func parseJSON(jsonStr []byte) {
    var person Person
    json.Unmarshal(jsonStr, &person)

    // The numeric value with an exponent is lost.
    fmt.Println(person.Id)
}
Salin selepas log masuk

Apabila kami menyediakan rentetan JSON seperti { "id": 1.2E 8, "name": "John" } sebagai input, fungsi parseJSON mencetak 0, menunjukkan bahawa eksponen diabaikan.

Penyelesaian

Untuk menyelesaikan isu ini, laraskan jenis medan Id kepada titik terapung taip seperti float64, seperti yang ditunjukkan di bawah:

type Person struct {
    Id   float64 `json:"id"`
    Name string `json:"name"`
}
Salin selepas log masuk

Pengubahsuaian ini membolehkan Go mentafsir dengan betul eksponen dan kekalkan nilai berangka.

Pendekatan Alternatif dengan Cangkuk

Untuk kes yang menukar jenis medan tidak dapat dilaksanakan, anda boleh menggunakan penyelesaian yang melibatkan "dummy" padang dan cangkuk tersuai. Cangkuk ini akan menghantar nilai daripada medan "dummy" kepada jenis integer yang diingini.

type Person struct {
    Id    float64          `json:"id"`
    _Id   int64             
    Name  string           `json:"name"`
}

func parseJSONWithHook(jsonStr []byte) {
    var person Person
    json.Unmarshal(jsonStr, &person)

    if reflect.TypeOf(person._Id) == reflect.TypeOf((int64)(0)) {
        person._Id = int64(person.Id)
    }
}
Salin selepas log masuk

Dengan mengikuti mana-mana pendekatan, anda boleh berjaya mengendalikan nilai berangka dengan eksponen dalam program Go anda.

Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshalkan Nilai Angka JSON dengan Eksponen dalam Go?. 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