Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Eksponen dalam JSON Unmarshaling untuk Nilai Numerik dalam Go?

Bagaimana Mengendalikan Eksponen dalam JSON Unmarshaling untuk Nilai Numerik dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-23 07:04:23
asal
802 orang telah melayarinya

How to Handle Exponents in JSON Unmarshaling for Numeric Values in Go?

Golang Json Unmarshal Numeric with Exponent

Apabila membuka rentetan JSON ke dalam struct yang mengandungi nilai angka dengan eksponen, anda mungkin menghadapi kes di mana eksponen dipenggal secara konsisten kepada 0. Isu ini boleh timbul apabila jenis medan struct anda tidak sepadan jenis data dalam JSON.

Dalam contoh yang disediakan, medan Id bagi struct Person ditakrifkan sebagai uint64, yang mewakili integer 64-bit yang tidak ditandatangani. Walau bagaimanapun, nilai dalam rentetan JSON ialah nombor perpuluhan dalam tatatanda saintifik (1.2E 8).

Memandangkan Go tidak boleh menukar secara automatik perpuluhan dengan eksponen kepada integer 64-bit yang tidak ditandatangani, hasilnya dipotong kepada 0.

Cara Menyelesaikan Isu

Untuk menyelesaikan isu ini, anda boleh mengubah suai jenis medan Id untuk memadankan jenis data dalam rentetan JSON. Dalam kes ini, memandangkan nombor tersebut ialah perpuluhan, anda boleh menggunakan float32 atau float64:

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

Dengan mengemas kini jenis kepada float32 atau float64, Go kini boleh mentafsir nilai berangka dengan eksponen dan menetapkannya dengan betul ke medan Id struct Orang.

Sebagai alternatif, jika anda ingin mengekalkan jenis integer asal untuk Id, anda boleh menggunakan cangkuk unmarshaler JSON tersuai. Cangkuk ini boleh menukar nilai titik terapung kepada integer sebelum memberikannya kepada medan:

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

func (p *Person) UnmarshalJSON(b []byte) error {
    type Alias Person
    var a Alias

    if err := json.Unmarshal(b, &a); err != nil {
        return err
    }

    // Convert the float64 Id to int64
    p.Id = int64(a.Id)

    return nil
}
Salin selepas log masuk

Dengan unmarshaler tersuai, nilai berangka dengan eksponen dalam rentetan JSON akan ditukar dengan betul dan diberikan kepada medan Id struct Orang.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Eksponen dalam JSON Unmarshaling untuk Nilai Numerik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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