国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

golang中json反序列化可能遇到的問題

2020-04-01 18:59:32
字體:
來源:轉載
供稿:網友

前言

在golang/299799.html">golang/279492.html">golang中,當浮點數超過一定數值的時候,golang會把它弄成科學計數法的形式進行顯示(好像只要大于七位數就變成科學計數法了)

var val float64val = 1000000fmt.Println(val) // ==> 1e+06

而在日常開發中,我們經常遇到這樣一個問題,就是要反序列化前端傳遞來的json,因為數據結構未知,所以我們便會使用map[string]interface{}來接收反序列化的結果。由于golang將json解析到interface{}類型的時候,遵循如下規則

  • bool 代表 JSON booleans,
  • float64 代表 JSON numbers,
  • string 代表 JSON strings,
  • nil 代表 JSON null.

所以如果我們接收到的json中存在一個比較大的數字,那么它就會被解析成float64類型的,并且有可能顯示為科學計數法的形式,比如下面這個例子

package mainimport ( "encoding/json" "fmt")func main() { //Create the Json string var data = ` { "id": 12423434,  "Name": "Fernando" } ` //Marshal the json to a map var result map[string]interface{} err := json.Unmarshal([]byte(data), &result) if err != nil { fmt.Println(err.Error()) return } fmt.Println(result)}

輸出如下結果

map[id:1.2423434e+07 Name:Fernando]

這個時候如果把它傳遞給前端使用的話,那么前端是有可能會報錯的。所以我們最好還是保持這個數字的原始字符串表現形式。即使用json.Number類型來表示

所以換成如下代碼就可以了

package mainimport ( "encoding/json" "fmt" "strings")func main() { //Create the Json string var data = ` { "id": 12423434,  "Name": "Fernando" } ` //Marshal the json to a map var result map[string]interface{} d := json.NewDecoder(strings.NewReader(data)) d.UseNumber() err := d.Decode(&result) if err != nil { fmt.Println(err.Error()) return } // 此刻result["id"]的類型就是json.Number了 它的底層類型其實就是string fmt.Println(result)}

輸出如下結果

map[id:12423434 Name:Fernando]

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 香格里拉县| 海伦市| 陵川县| 慈溪市| 平乐县| 龙口市| 兴隆县| 澄迈县| 贺兰县| 门头沟区| 北辰区| 白银市| 章丘市| 科尔| 西丰县| 灵宝市| 潞西市| 商南县| 门头沟区| 竹北市| 雅江县| 栾城县| 和硕县| 宾川县| 兴城市| 剑川县| 上栗县| 怀来县| 陆河县| 故城县| 宜良县| 双鸭山市| 南昌县| 溆浦县| 佛山市| 平舆县| 榆树市| 弥渡县| 桦南县| 新昌县| 巴林左旗|