我修复的印象最深的一个bug:数据内有超长整数末尾变0

简介: 接口请求json解析时,数字超过一定位数,数据内有超长整数末尾变0的处理方法

1637720212(1).jpg
ajax请求的数据,参数完全正常,奇怪的问题是浏览器会把我传入的channelId的后两位的数据变00,造成了数据的错错错。这就是因为channelId的数据超长精度丢失,导致数据有误。
查找困难的过程是艰难的,解决的办法很简单:
axios请求
微信截图_20211124102922.png

if (!baseStr || typeof baseStr != 'string') return;
var jsonData = null;
try {

jsonData = JSON.parse(baseStr);

} catch (err){

return null;

}
var needReplaceStrs = [];
loopFindArrOrObj(jsonData,needReplaceStrs);
needReplaceStrs.forEach(function (replaceInfo) {

var matchArr = baseStr.match(eval('/"'+ replaceInfo.key + '":[0-9]{15,}/'));
if (matchArr) {
  var str = matchArr[0];
  var replaceStr = str.replace('"' + replaceInfo.key + '":','"' + replaceInfo.key + '":"');
  replaceStr += '"';
  baseStr = baseStr.replace(str,replaceStr);
}

});
var returnJson = null;
try {

returnJson = JSON.parse(baseStr);

}catch (err){

return null;

}
return returnJson;
}
//遍历对象类型的
function getNeedRpStrByObj(obj,needReplaceStrs) {
for (var key in obj) {

var value = obj[key];
if (typeof value == 'number' && value > 9007199254740992){
  needReplaceStrs.push({key:key});
}
loopFindArrOrObj(value,needReplaceStrs);

}
}
//遍历数组类型的
function getNeedRpStrByArr(arr,needReplaceStrs) {
for(var i=0; i<arr.length; i++){

var value = arr[i];
loopFindArrOrObj(value,needReplaceStrs);

}
}
//递归遍历
function loopFindArrOrObj(value,needRpStrArr) {
var valueTypeof = Object.prototype.toString.call(value);
if (valueTypeof == '[object Object]') {

needRpStrArr.concat(getNeedRpStrByObj(value,needRpStrArr));

}
if (valueTypeof == '[object Array]') {

needRpStrArr.concat(getNeedRpStrByArr(value,needRpStrArr));

}
}

相关文章
|
测试技术
解决Bug应有的心态和解决方法的一些思路、方法和心得
永远要相信程序是不会骗你的,是自己在处理理逻辑中出问题,而在特定的环境中才会出现或者是自己压根就想不到情况下出现。 前几天在处理一个接口任务时,在测试环境跑是一点都没有,但在正式环境却没有将数据拉下来。没有报任何错误,一度怀疑、抱怨! 还好最后找到问题解决了!
84 0
|
4月前
|
存储 Windows
删除的视频怎样才能恢复?详尽指南
误删视频别慌,本文概览实用恢复技巧。首要行动:停用涉事存储以防数据覆盖。探索回收站,检索近期删除。备份是宝藏,搜寻云或外置硬盘。软件救星谨慎付费,试用验证。极端情况,专家服务可开盘恢复,代价高昂需权衡。
删除的视频怎样才能恢复?详尽指南
|
6月前
|
算法 程序员
为何程序员在编写程序时难以一次性将所有代码完美无瑕地完成,而是需要经历反复修改Bug的过程?
为何程序员在编写程序时难以一次性将所有代码完美无瑕地完成,而是需要经历反复修改Bug的过程?
67 7
|
存储 编译器 C语言
还在为每次打开程序的输入烦恼吗,这篇文章让你不在迷茫
在之前我们编写的程序中,我们总要录入一些数据给予程序用于计算,但是当我们退出程序后录入的数据会销毁,因为此时数据都是存放在内存中。等到下次再运行程序时,数据又得从新录入,这样就非常的难受。
67 0
还在为每次打开程序的输入烦恼吗,这篇文章让你不在迷茫
|
JSON NoSQL Redis
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
102 0
|
Java 中间件 程序员
最网最全bug定位套路,遇见bug再也不慌了
最网最全bug定位套路,遇见bug再也不慌了
318 0
|
算法 搜索推荐 程序员
再也不担心用不好二分法了,因为我找到了"作弊"的接口
导读:算法是程序的灵魂,而复杂度则是算法的核心指标之一。为了降低复杂度量级,可谓是令无数程序员绞尽脑汁、甚至是摧枯秀发。一般而言,若能实现对数阶的时间复杂度,算法效率往往就已经非常理想。而实现对数阶的常用思想莫过于二分。 二分常有,好用的二分并不常有。while条件是lo<hi还是lo<=hi?分支判断mid是+1还是-1还是仍然取值mid?最后return哪个值?如果目标序列不是严格递增又该怎么处理?想想都不禁让人敬而远之。幸运的是,在python语言中,已经内置了成熟的二分函数。
136 0
再也不担心用不好二分法了,因为我找到了"作弊"的接口
从即将放弃到找到自己满意的工作?
从即将放弃到找到自己满意的工作?
112 0
从即将放弃到找到自己满意的工作?
|
Java 数据安全/隐私保护 测试技术
我修复的印象最深的一个bug,一个导致CPU和内存异常到无法响应的BUG
系统上线一段时间后,客户反映接口响应特别慢,甚至没有响应,第一时间依次检查了网络、服务器资源使用情况,发现服务器CPU和内存占用率都非常的高,经过一阵紧张的排查,最终发现问题出现的根源,这就是我修复的印象最深的一个bug就是由于String的用法不当所造成的。
484 0
我修复的印象最深的一个bug,一个导致CPU和内存异常到无法响应的BUG