golang中json反序列化可能遇到的问题
2018-01-12 11:19
911 查看
前言
在golang中,当浮点数超过一定数值的时候,golang会把它弄成科学计数法的形式进行显示(好像只要大于七位数就变成科学计数法了)
var val float64 val = 1000000 fmt.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 main import ( "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 main import ( "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]
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
相关文章推荐
- fastjson之坑-你可能遇到的各种各样的奇葩问题
- 使用SpringMVC注解ResponseBody返回Json数据可能遇到的问题
- 【学习笔记】C#Json和Bson序列化中遇到的一些问题
- MVC5序列化Json时遇到的大小写问题及解决方法
- Hibernate POJO在序列化(JSON)时遇到的若干问题
- Hibernate POJO在序列化(JSON)时遇到的若干问题
- MVC5序列化Json时遇到的大小写问题及解决方法
- golang json.Marshal使用中遇到的崩溃问题
- 序列化Json时遇到的大小写问题及解决方法
- golang中使用package json遇到的问题
- iOS 本地化 国际化 相关的工具,命令,和可能遇到的问题
- 解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题
- VC++编译JSON源码常遇到的问题。
- json序列化懒加载问题
- 在解析json时遇到get(key);key不存在时解析错误的问题
- FastJson序列化问题
- C# JSON序列化日期格式问题
- 序列化遇到的小问题
- Flume学习2_Flume NG简介、配置实战、技术架构应用和可能遇到的问题
- TensorFlow 初学者在使用过程中可能遇到的问题及解决办法(转)