qicosmos / iguana

universal serialization engine
Apache License 2.0
1.09k stars 224 forks source link

json解析0.0为int #238

Open xmq731 opened 8 months ago

xmq731 commented 8 months ago

测试json来源:http://6.push2.eastmoney.com/api/qt/clist/get?pn=1&fid=3&pz=10000&po=1&np=1&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fltt=2&fields=f2,f12,f14,f13 “data”->"diff"->“f2”

bbbgan commented 8 months ago

抱歉,我没能很清楚的理解你的意思,你的意思是解析0.0为int的时候报错? 按理说,json解析数字会根据在结构体中定义的类型解析,如果你定义的是double之类的,json解析应该是没有问题的,如果是int,解析是会报错的,因为“0.0”不是一个合格的整数字符串。你的意思是这个需要得到支持吗?

xmq731 commented 8 months ago

抱歉,可能表述有点问题。这里没有使用反射,就是0.0原则上是应该是解析成double类型,但是库却解析成了int类型,因为jvalue底层应该是使用的std::variant结构,使用get()就会报异常。

bbbgan commented 8 months ago

确实存在这样的问题,考虑到不仅仅是“0.0”,有时候也有“0”这样的用户也希望被解析成double类型,因此这边目前选择提供一个选项给用户,即强制解析数字底层都使用double类型。你觉得这样可以吗?亦或者只能去单独遍历一遍数字类型从而判断 “0.0”还是“0”这种类型。

bbbgan commented 8 months ago

在最新的PR中实现了在任何情况下解析底层数字为double,简单的解决了歧义的问题,可以查看最新的PR,以及测试代码, 当使用 parse的时候,意味着解析数字一律为double,具体使用可以看最新的测试代码

xmq731 commented 8 months ago

收到

bbbgan commented 8 months ago

已经合并到主干了,你拉取最新代码就可以了