我修复的印象最深的一个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应有的心态和解决方法的一些思路、方法和心得
永远要相信程序是不会骗你的,是自己在处理理逻辑中出问题,而在特定的环境中才会出现或者是自己压根就想不到情况下出现。 前几天在处理一个接口任务时,在测试环境跑是一点都没有,但在正式环境却没有将数据拉下来。没有报任何错误,一度怀疑、抱怨! 还好最后找到问题解决了!
93 0
|
7月前
|
人工智能 网络安全 Python
一篇普通的bug日志——bug的尽头是next吗?
[bug 1] TypeError: ‘method’ object is not subscriptable 问题代码:
140 0
一篇普通的bug日志——bug的尽头是next吗?
|
JSON NoSQL Redis
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
106 0
|
数据采集 算法
拒绝想当然,不看文档导致GNE 的隐秘 bug
拒绝想当然,不看文档导致GNE 的隐秘 bug
109 0
|
Python
上古代码漫游记(二):把陷阱去掉了,反倒踩进了新的陷阱?
上古代码漫游记(二):把陷阱去掉了,反倒踩进了新的陷阱?
112 0
|
存储 SQL 关系型数据库
覆盖索引这回事算是整明白了
覆盖索引这回事算是整明白了
274 0
覆盖索引这回事算是整明白了
|
算法 C++
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
128 0
【牛客刷题-算法】加精 | 合并两个有序的链表 - 从思路设计、bug排除到最终实现的全过程
|
Java 中间件 程序员
最网最全bug定位套路,遇见bug再也不慌了
最网最全bug定位套路,遇见bug再也不慌了
346 0
|
算法 搜索推荐 程序员
再也不担心用不好二分法了,因为我找到了"作弊"的接口
导读:算法是程序的灵魂,而复杂度则是算法的核心指标之一。为了降低复杂度量级,可谓是令无数程序员绞尽脑汁、甚至是摧枯秀发。一般而言,若能实现对数阶的时间复杂度,算法效率往往就已经非常理想。而实现对数阶的常用思想莫过于二分。 二分常有,好用的二分并不常有。while条件是lo<hi还是lo<=hi?分支判断mid是+1还是-1还是仍然取值mid?最后return哪个值?如果目标序列不是严格递增又该怎么处理?想想都不禁让人敬而远之。幸运的是,在python语言中,已经内置了成熟的二分函数。
142 0
再也不担心用不好二分法了,因为我找到了"作弊"的接口
|
Java 数据安全/隐私保护 测试技术
我修复的印象最深的一个bug,一个导致CPU和内存异常到无法响应的BUG
系统上线一段时间后,客户反映接口响应特别慢,甚至没有响应,第一时间依次检查了网络、服务器资源使用情况,发现服务器CPU和内存占用率都非常的高,经过一阵紧张的排查,最终发现问题出现的根源,这就是我修复的印象最深的一个bug就是由于String的用法不当所造成的。
490 0
我修复的印象最深的一个bug,一个导致CPU和内存异常到无法响应的BUG

热门文章

最新文章