国产探花免费观看_亚洲丰满少妇自慰呻吟_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武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 栖霞市| 聂荣县| 新宾| 平顶山市| 隆尧县| 腾冲县| 宽城| 肃北| 白城市| 德州市| 怀化市| 惠来县| 兴仁县| 山西省| 板桥市| 宜阳县| 宁城县| 清远市| 鄂托克旗| 万年县| 彭阳县| 城口县| 西丰县| 东明县| 芦山县| 五大连池市| 屏东市| 宿迁市| 德清县| 武邑县| 崇文区| 得荣县| 射洪县| 宜都市| 政和县| 壤塘县| 澄迈县| 思茅市| 叶城县| 绿春县| 丹江口市|