背景

众所周知,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解析踩坑相关推荐

  1. Golang交叉编译Sqlite3踩坑记录

    Golang交叉编译Sqlite3踩坑记录 ,windows下编译golang go-sqlite3解决方案 众所周知Golang能够在一个平台编译不同平台可执行程序进行发布 然而在遇到需要内置处理程 ...

  2. golang json解析

    前言 Go 语言自带的 encode/json 包提供了对 JSON 数据格式的编码和解码能力. 解析 JSON 的关键,其实在于如何声明存放解析后数据的变量的类型. 此外使用 json 编码还会有几 ...

  3. Android Kotlin Gson解析踩坑记录

    一.背景 一般我们在进行网络请求拿到返回结果之后,我们期望能够转化成对应的Java实体类,在这个转化过程中,可以使用自动解析的方式,也可以使用三方提供的工具类,比如Gson.FastJson等. 针对 ...

  4. json解析对应的value为null_解决golang json解析出现值为空的问题

    我是通过beego框架,将请求过来的json进行解析,并将值保存在结构体中 --------------------1--------------------- request := UpdateCo ...

  5. Golang json 解析与生成

    文章目录 1.解析 json 1.1 map[string]interface{} 存储 json 1.2 struct 存储 json 1.3 []map[string]interface{} 解析 ...

  6. go语言json解析的坑 注意事项

    注意事项: 1. 结构体中的字段名首字母需大写,这样解析json时才能赋值:字段名小写的话,解析不会报错,但是字段都是空值 2. json字符串可以解析成结构体数组,或者结构体指针的数组,具体操作可见 ...

  7. Go实战--golang中使用号称全世界最快的JSON解析器json-iterator(json-iterator/go)

    生命不止,继续go go go!!! 号外号外,差不一条广告,我的博客六月到十一月UV的地域分布: golang中的使用json一点也不陌生,golang为我们提供了官方的encoding/json: ...

  8. 【golang程序包推荐分享】分享亿点点golang json操作及myJsonMarshal程序包开发的踩坑经历 :)

    目录[阅读时间:约5分钟] 一.概述 1.Json的作用 2.Go官方 encoding/json 包 3. golang json的主要操作 二.Json Marshal:将数据编码成json字符串 ...

  9. go nil json.marshal 完是null_字节跳动踩坑记#3:Go服务灵异panic

    这个坑比较新鲜,刚填完,还冒着冷气. - 1 - 在字节跳动,我们服务的所有 log 都通过统一的日志库采集到流式日志服务.落地 ES 集群,配上字节云超(sang)级(xin)强(bing)大(ku ...

最新文章

  1. BCH协议升级倒计时——超过68%的BCH全节点已支持升级
  2. python 之模块引入
  3. 写底部样式一定要加的属性
  4. 【深度学习】人人都能看得懂的卷积神经网络——入门篇
  5. 实用的SqlHelper类
  6. c++一个问题:while(!cin) 的解释
  7. 方法:查询MongoDB数据库中最新一条数据(JAVA)
  8. oracle会闪,oracle闪来
  9. [翻译]Log Everything All the Time
  10. zabbix agent报错 :cannot connect to [[127.0.0.1]:10051]: [111] Connection refused
  11. 清华大学计算机学院研究生导师,清华大学计算机科学与技术系研究生导师简介-武永卫...
  12. 昆仑通态复制的程序可以用吗_MCGS昆仑通态触摸屏常见问题(5)
  13. spotfire Document Property
  14. SSD网络及代码理解
  15. u深度u盘制作与装系统教程
  16. SQL server 还原数据库遇到正在使用的解决方法:
  17. 豆果美食批量发布菜谱软件
  18. c语言编程求百位和个位的差,对任意一个键盘输入的3位整数,求出它的个位、十位和百位。 一道c语言题目?...
  19. Android仿拼多多拼团堆叠头像
  20. java去除word修改痕迹_去除Word修订

热门文章

  1. 【狂神说】MySQL学习
  2. 【原创】BSC链只涨不跌的合约学习【完整源码】
  3. 【web】Helmet是一系列帮助增强Node.JS之Express/Connect等Javascript Web应用安全的中间件(csp Content-Security-Policy等策略)
  4. 人体姿态检测数据集Human3.6
  5. TCP/IP网络协议——单播多播和广播
  6. 如何建设有优势的“智慧校园”生态圈(一)
  7. 电脑上如何登录两个微信
  8. PHP对接易联云小票打印机
  9. java读取字节效率最高_java中字节流读写和字符流读写怎么理解?哪个效率更高...
  10. 国内外4款主流ERP系统评测,哪款最好用?