Js中JSON.parse函数解析导致的数据异常
今天在项目中遇到一个问题,通过扫一扫功能将扫描的条形码返回给前端,前端同学返回返回的条形码不正确,后边两位和源数据对不上,只有Android有这个问题,只有Android有这个问题,那就只能Android这边去排查了,经过一番排查发现,到最终Android返回给前端的的数据是么有问题的,那么为什么到前端就出错了呢?前端同学的调用方式也没问题?到底是哪里出错了,经过一番log发现数据经过JSON.parse()
函数后数据就发生变化了,自己写了个例子看西边代码
var num="123456789987654333";
var parse=JSON.parse(num);
123456789987654340
确实是和原数据对不上了,经过一番查找资料和测试发现是数据超过16位之后就会出错,JSON.parse()
方法用来解析JSON字符串,之前也解析过其他json字符串,也没出现这种问题比如
var obj= '{"result":true, "count":42}';
var res=JSON.parse(obj)
res
{result: true, count: 42}
这也没问题,那为什么上边的就有问题了呢?经过一番资料查询,才知道可能是和json字符串内容有关系,可能解析的时候认为var num="123456789987654333";
里边是num类型,结果又由于长度比较长所有就出错了,有什么依据说明是num类型看下边测试:
var num="123456789987654333";
var res=JSON.parse(num)
typeof res
"number"
输出log显示解析完后确实是num类型的,那么这个怎么解决呢,就是让JSON.parse()
函数解析的时候不认为里边是num类型就行了吧,那咋做呢看下边测试:
var num=" \"123456789987654333 \" ";
var res=JSON.parse(num)
typeof res
"string"
res
"123456789987654333 "
根据以上资料查询和测试,应用到项目中果真问题就解决