我修复的印象最深的一个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));

}
}

相关文章
|
Oracle Java 关系型数据库
使用了这个神器,让我的代码bug少了一半(下)
使用了这个神器,让我的代码bug少了一半(下)
使用了这个神器,让我的代码bug少了一半(下)
L1-058 6翻了 (15 分)(while的巧妙使用)
L1-058 6翻了 (15 分)(while的巧妙使用)
78 0
|
JSON NoSQL Redis
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
108 0
|
算法 C++
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
130 0
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
|
Java 中间件 程序员
最网最全bug定位套路,遇见bug再也不慌了
最网最全bug定位套路,遇见bug再也不慌了
354 0
|
算法 搜索推荐 程序员
再也不担心用不好二分法了,因为我找到了"作弊"的接口
导读:算法是程序的灵魂,而复杂度则是算法的核心指标之一。为了降低复杂度量级,可谓是令无数程序员绞尽脑汁、甚至是摧枯秀发。一般而言,若能实现对数阶的时间复杂度,算法效率往往就已经非常理想。而实现对数阶的常用思想莫过于二分。 二分常有,好用的二分并不常有。while条件是lo<hi还是lo<=hi?分支判断mid是+1还是-1还是仍然取值mid?最后return哪个值?如果目标序列不是严格递增又该怎么处理?想想都不禁让人敬而远之。幸运的是,在python语言中,已经内置了成熟的二分函数。
144 0
再也不担心用不好二分法了,因为我找到了"作弊"的接口
|
安全 Java 测试技术
使用了这个神器,让我的代码bug少了一半(上)
使用了这个神器,让我的代码bug少了一半
使用了这个神器,让我的代码bug少了一半(上)
|
存储 机器学习/深度学习 算法
|
存储 NoSQL 关系型数据库
索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!(上)
索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!(上)
索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!(上)
|
SQL 存储 关系型数据库
索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!(下)
索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!(下)
索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!(下)