背景:
客户端和管理端通信,需要上报一些数据,由于数据量比较小,所以使用的Json格式,有些字段需要用到int64。
问题:
发现自己使用的Json库不支持int64,只支持int32:
那么,这是怎么回事?int64不是很常见的类型吗?为什么不支持?又怎么能让它支持?
分析:
我记得以前用过的Json三方库都是支持int64的,比如CJson:
而且Kotlin和Swift中的Json也都是支持int64的。
那就很奇怪了,为什么有些Json库不支持int64呢?
我首先搜索的是“怎么让Json支持int64”,于是找到了这个帖子:
通过帖子下面的回复,我才发现原来Json标准是不支持int64这么大的数字的,它最大只支持到2^53-1,如果超过最大值可能会导致Json的解析出错误。
注意,这里是Json的标准不支持int64,当然有些语言可能解析会正确,但应该可以肯定的是,JavaScript不支持解析int64的Json。
所以,为了遵循Json的标准,有些Json库把int64的支持给拿掉了,而其它那种支持int64的Json库其实是有潜在的风险的。
那么,真的有int64这种上传的需求怎么办?使用string来替代。
这里你可以看到,Google所有关于int64的类型都是使用的string来代替。
所以,我们内部多平台立刻做了统一整改,协议中所有Json的int64字段都改成了string,来预防潜在的bug。
不知道大家以前有没有遇到过这个坑?