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
Linda Hamiltonasal
2024-11-17 02:24:03261semak imbas

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
}

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
}

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

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!

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