Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekalkan Ketepatan Int64 Apabila Menghapuskan JSON dalam Go?

Bagaimana untuk Mengekalkan Ketepatan Int64 Apabila Menghapuskan JSON dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-12-29 06:04:15298semak imbas

How to Preserve Int64 Precision When Unmarshalling JSON in Go?

Kekalkan Nilai Int64 Apabila Menghuraikan JSON dalam Go

Pertimbangkan badan JSON berikut:

{"tags": [{"id": 4418489049307132905}, {"id": 4418489049307132906}]}

Apabila menggunakan json .Unmarshal() dalam Pergi untuk memproses JSON ini, nilai integer 64-bit (id) ialah sering ditukar kepada float64 kerana sifat penghurai JSON Go. Ini boleh menjadi masalah jika anda perlu mengekalkan ketepatannya.

Penyelesaian 1: Penyahkod Tersuai

Satu pendekatan ialah menggunakan penyahkod tersuai dan jenis json.Number. json.Number ialah jenis yang mewakili literal nombor JSON.

import (
    "encoding/json"
    "fmt"
    "bytes"
    "strconv"
)

func main() {
    body := []byte(`{"tags": [{"id": 4418489049307132905}, {"id": 4418489049307132906}]}`)
    dat := make(map[string]interface{})
    d := json.NewDecoder(bytes.NewBuffer(body))
    d.UseNumber()
    if err := d.Decode(&dat); err != nil {
        panic(err)
    }
    tags := dat["tags"].([]interface{})
    n := tags[0].(map[string]interface{})["id"].(json.Number)
    i64, _ := strconv.ParseUint(string(n), 10, 64)
    fmt.Println(i64) // Prints 4418489049307132905
}

Penyelesaian 2: Struktur Tersuai

Pilihan lain ialah menyahkod JSON menjadi struktur tersuai yang secara khusus sepadan dengan format data anda.

import (
    "encoding/json"
    "fmt"
)

type A struct {
    Tags []map[string]uint64 // "tags"
}

func main() {
    body := []byte(`{"tags": [{"id": 4418489049307132905}, {"id": 4418489049307132906}]}`)
    var a A
    if err := json.Unmarshal(body, &a); err != nil {
        panic(err)
    }
    fmt.Println(a.Tags[0]["id"]) // Logs 4418489049307132905
}

Dalam penyelesaian ini, uint64 digunakan secara langsung dalam struktur, memastikan bahawa nilai integer 64-bit dipelihara.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Ketepatan Int64 Apabila Menghapuskan JSON 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