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, 不然会报错。。。建议是解析之前先做个判断,数据不为空时再解析。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值