最近发现的一个坑
当用enconding/json
包的时候,数字默认是处理为float64类型的,这就导致了int64可能会丢失精度,这时候要用dec.UseNumber将处理的数字转换成json.Number的形式,再自己去做type assertion
代码
package main
import (
"fmt"
"encoding/json"
"strings"
)
func CreateJsonUseNum(source string) map[string]interface{} {
data := map[string]interface{}{}
dec := json.NewDecoder(strings.NewReader(source))
dec.UseNumber()
dec.Decode(&data)
return data
}
func CreateJson(source string) map[string]interface{} {
data := map[string]interface{}{}
dec := json.NewDecoder(strings.NewReader(source))
dec.Decode(&data)
return data
}
func main() {
strMap := `{"test": true,"id":6653078421906374662}`
p := CreateJson(strMap)
p2 := CreateJsonUseNum(strMap)
fmt.Println(p)
fmt.Println(p2)
}