凡亿教育-小至
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | 今天踩到了一个Json的坑
今天踩到了一个Json的坑

背景

客户端和管理端通信,需要上报一些数据,由于数据量比较小,所以使用的Json格式,有些字段需要用到int64。


问题

发现自己使用的Json库不支持int64,只支持int32:

那这是怎么回事?int64不是很常见的类型吗?为什么不支持?又怎么能让它支持?


分析

我记得以前用过的Json三方库都是支持int64的,比如CJson:

而且Kotlin和Swift中的Json也都是支持int64的。

那就很奇怪了,为什么有些Json库不支持int64呢?


我首先搜索的是怎么让Json支持int64,找到了这个帖子:https://stackoverflow.com/questions/209869/what-is-the-accepted-way-to-send-64-bit-values-over-json。


通过帖子下面的回复我才发现原来Json标准是不支持int64这么大的数字的,它最大只支持到2^53-1,如果超过最大值可能会导致Json的解析出错误。注意这里是Json的标准不支持int64,当然有些语言可能解析会正确,但是应该可以肯定的是JavaScript不支持解析int64的Json。

也可以看这个中文文档:https://www.fly63.com/article/detial/3770


所以为了遵循Json的标准,有些Json库把int64的支持给拿掉了,而其它那种支持int64的Json库其实是有潜在的风险的。


那真的有int64这种上传的需求怎么办?使用string来替代。


具体可以参考Google的文档:https://developers.google.com/discovery/v1/type-format


这里你可以看到,Google所有关于int64的类型都是使用的string来代替。


所以,我们内部多平台立刻做了统一整改,协议中所有Json的int64字段都改成了string,来预防潜在的bug。


不知道大家以前有没有遇到过这个坑。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论