在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中文網其他相關文章!