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
Mary-Kate Olsenasal
2024-11-23 07:04:23804semak imbas

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

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
}

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