Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menghuraikan Integer JSON sebagai Integer, Bukan Terapung, di Golang?

Bagaimanakah Saya Boleh Menghuraikan Integer JSON sebagai Integer, Bukan Terapung, di Golang?

Linda Hamilton
Lepaskan: 2024-11-17 02:24:03
asal
249 orang telah melayarinya

How Can I Parse JSON Integers as Integers, Not Floats, in Golang?

Menghuraikan Integer JSON Sebagai Integer, Tidak Terapung dalam Golang

Di Golang, menghuraikan nilai integer JSON sebagai terapung ialah masalah biasa. Pakej pengekodan/json lalai tidak membezakan antara nombor integer dan apungan, yang membawa kepada konflik jenis data dan kegagalan penulisan apabila berinteraksi dengan pangkalan data. Untuk menangani isu ini, kami boleh menggunakan pendekatan alternatif untuk menghuraikan nilai JSON.

Nilai JSON Tersuai untuk Jenis Nombor

Satu penyelesaian ialah menggunakan mekanisme Go umum untuk nilai JSON tersuai. Dengan melaksanakan jenis JSON tersuai yang membezakan antara integer dan apungan, kami boleh mengawal proses penukaran jenis data. Contoh pelaksanaan ditunjukkan di bawah:

type MyInt int64

func (mi MyInt) MarshalJSON() ([]byte, error) {
    return []byte(strconv.FormatInt(int64(mi), 10)), nil
}
Salin selepas log masuk

Jenis tersuai ini menukar nilai integer kepada rentetan apabila menyusunnya menjadi JSON. Untuk menyahmarshal nilai JSON ke dalam jenis tersuai, kita boleh menggunakan fungsi json.Unmarshal:

var raw map[string]interface{}
err := json.Unmarshal([]byte(str), &raw)
parsed := make(map[string]interface{}, len(raw))
for key, val := range raw {
    s := string(val)
    i, err := strconv.ParseInt(s, 10, 64)
    if err == nil {
        parsed[key] = MyInt(i)
        continue
    }

    // Handle other types as needed
}
Salin selepas log masuk

Menggunakan json.Nombor Jenis

Pendekatan lain melibatkan penggunaan json.Number, jenis yang mewakili nombor JSON. Ia menyediakan kaedah untuk menukar nombor kepada nilai int64 dan float64, membolehkan kami mengendalikan penukaran jenis secara manual:

var parsed map[string]interface{}
d := json.NewDecoder(strings.NewReader(str))
d.UseNumber()
err := d.Decode(&parsed)
for key, val := range parsed {
    n, ok := val.(json.Number)
    if !ok {
        continue
    }
    if i, err := n.Int64(); err == nil {
        parsed[key] = i
        continue
    }
    if f, err := n.Float64(); err == nil {
        parsed[key] = f
        continue
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Integer JSON sebagai Integer, Bukan Terapung, di Golang?. 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