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