Golang json解析踩坑
背景
众所周知,PHP是弱类型,Go是强类型,所以Go的json解析注定曲折。
有一段json如下:
{"name":"Gopher","age":23,"marray":false}
PHP使用:json_decode函数解析,解出的数据类型并不重要
Go解析: 使用json.Unmarshal函数,此函数如果使用原生函数 ,目标结构体字段数字类型定义为字符串类型,那么解析结果中会丢失数字类型,即原生解析,无法把数字类型解析为字符创类型
解决方案
如果场景中确实需要将数字类型的数据解析成字符串的类型(因为统一字段类型后续开发比较方便,需要什么类型使用时即时转换即可),那么我们可以引入一个第三方包jsoniter
使用时
1.先go get github.com/json-iterator/go 下载包 (如果项目中已经引入了josniter就不用再go get了)
2. 开启php兼容模式 ,及初始化函数init中引入 extra.RegisterFuzzyDecoders()
3.然后代码里使用这个包覆盖掉原生json, var json = jsoniter.ConfigCompatibleWithStandardLibrary
4. 代码里正常使用json包内函数即可, jsoniter包已经将json原生方法全部实现,只是补充了几个功能,其中就包括支持将数字类型数据解析为字符串类型
拓展
当我们使用json包解析、序列化数据时,你要保证数据不是空的即0byte, 不然会报错。。。建议是解析之前先做个判断,数据不为空时再解析。
Golang json解析踩坑相关推荐
- Golang交叉编译Sqlite3踩坑记录
Golang交叉编译Sqlite3踩坑记录 ,windows下编译golang go-sqlite3解决方案 众所周知Golang能够在一个平台编译不同平台可执行程序进行发布 然而在遇到需要内置处理程 ...
- golang json解析
前言 Go 语言自带的 encode/json 包提供了对 JSON 数据格式的编码和解码能力. 解析 JSON 的关键,其实在于如何声明存放解析后数据的变量的类型. 此外使用 json 编码还会有几 ...
- Android Kotlin Gson解析踩坑记录
一.背景 一般我们在进行网络请求拿到返回结果之后,我们期望能够转化成对应的Java实体类,在这个转化过程中,可以使用自动解析的方式,也可以使用三方提供的工具类,比如Gson.FastJson等. 针对 ...
- json解析对应的value为null_解决golang json解析出现值为空的问题
我是通过beego框架,将请求过来的json进行解析,并将值保存在结构体中 --------------------1--------------------- request := UpdateCo ...
- Golang json 解析与生成
文章目录 1.解析 json 1.1 map[string]interface{} 存储 json 1.2 struct 存储 json 1.3 []map[string]interface{} 解析 ...
- go语言json解析的坑 注意事项
注意事项: 1. 结构体中的字段名首字母需大写,这样解析json时才能赋值:字段名小写的话,解析不会报错,但是字段都是空值 2. json字符串可以解析成结构体数组,或者结构体指针的数组,具体操作可见 ...
- Go实战--golang中使用号称全世界最快的JSON解析器json-iterator(json-iterator/go)
生命不止,继续go go go!!! 号外号外,差不一条广告,我的博客六月到十一月UV的地域分布: golang中的使用json一点也不陌生,golang为我们提供了官方的encoding/json: ...
- 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)
目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...
- go nil json.marshal 完是null_字节跳动踩坑记#3:Go服务灵异panic
这个坑比较新鲜,刚填完,还冒着冷气. - 1 - 在字节跳动,我们服务的所有 log 都通过统一的日志库采集到流式日志服务.落地 ES 集群,配上字节云超(sang)级(xin)强(bing)大(ku ...
最新文章
- BCH协议升级倒计时——超过68%的BCH全节点已支持升级
- python 之模块引入
- 写底部样式一定要加的属性
- 【深度学习】人人都能看得懂的卷积神经网络——入门篇
- 实用的SqlHelper类
- c++一个问题:while(!cin) 的解释
- 方法:查询MongoDB数据库中最新一条数据(JAVA)
- oracle会闪,oracle闪来
- [翻译]Log Everything All the Time
- zabbix agent报错 :cannot connect to [[127.0.0.1]:10051]: [111] Connection refused
- 清华大学计算机学院研究生导师,清华大学计算机科学与技术系研究生导师简介-武永卫...
- 昆仑通态复制的程序可以用吗_MCGS昆仑通态触摸屏常见问题(5)
- spotfire Document Property
- SSD网络及代码理解
- u深度u盘制作与装系统教程
- SQL server 还原数据库遇到正在使用的解决方法:
- 豆果美食批量发布菜谱软件
- c语言编程求百位和个位的差,对任意一个键盘输入的3位整数,求出它的个位、十位和百位。 一道c语言题目?...
- Android仿拼多多拼团堆叠头像
- java去除word修改痕迹_去除Word修订
热门文章
- 【狂神说】MySQL学习
- 【原创】BSC链只涨不跌的合约学习【完整源码】
- 【web】Helmet是一系列帮助增强Node.JS之Express/Connect等Javascript Web应用安全的中间件(csp Content-Security-Policy等策略)
- 人体姿态检测数据集Human3.6
- TCP/IP网络协议——单播多播和广播
- 如何建设有优势的“智慧校园”生态圈(一)
- 电脑上如何登录两个微信
- PHP对接易联云小票打印机
- java读取字节效率最高_java中字节流读写和字符流读写怎么理解?哪个效率更高...
- 国内外4款主流ERP系统评测,哪款最好用?