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

Bagaimana untuk Mengekalkan Ketepatan Int64 Apabila Menghuraikan JSON dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-08 07:32:27
asal
215 orang telah melayarinya

How to Preserve Int64 Precision When Parsing JSON in Go?

Kekalkan Nilai Int64 Apabila Menghuraikan JSON dalam Go

Apabila menghuraikan data JSON dalam Go, fungsi json.Unmarshal sering menukar nilai integer besar kepada float64 jenis, yang boleh menjadi masalah untuk mengekalkan ketepatan.

Penyelesaian 1:

Untuk mengekalkan nilai int64 asal, gunakan penyahkod dan pilihan UseNumber:

package main

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

func main() {
    body := []byte("{\"tags\":[{\"id\":4418489049307132905},{\"id\":4418489049307132906}]}")
    d := json.NewDecoder(bytes.NewBuffer(body))

    // Enable number preservation
    d.UseNumber()

    var dat map[string]interface{}
    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
}
Salin selepas log masuk

Penyelesaian 2:

Sebagai alternatif, anda boleh menyahkod terus ke dalam struktur data tersuai:

package main

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
}
Salin selepas log masuk

Awas:

Perhatikan bahawa jenis nombor JavaScript ialah apungan berketepatan ganda IEEE754, yang bermaksud ia tidak boleh mewakili integer 64-bit tanpa kehilangan ketepatan.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Ketepatan Int64 Apabila Menghuraikan JSON dalam Go?. 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