Golang json解析踩坑

tech2023-05-30  52

背景

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

最新回复(0)