首頁 > 後端開發 > Golang > 在 Go 中解析 JSON 時如何保持 Int64 精確度?

在 Go 中解析 JSON 時如何保持 Int64 精確度?

Mary-Kate Olsen
發布: 2024-12-08 07:32:27
原創
216 人瀏覽過

How to Preserve Int64 Precision When Parsing JSON in Go?

在Go 中解析JSON 時保留Int64 值

在Go 中解析JSON 資料時,json.Unmarshal 函數通常會將大整數值轉換為float64類型,這可能會為維護帶來問題

解決方案 1:

要保留原始 int64 值,請使用解碼器和 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
}
登入後複製

方案二:

也可以直接解碼自訂資料結構:

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
}
登入後複製

注意:

注意:請注意,JavaScript 的數位類型是IEEE754雙精度浮點數,這意味著它無法表示 64 位元整數失去精確度。

以上是在 Go 中解析 JSON 時如何保持 Int64 精確度?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板