栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

axios处理特大数据碰到的问题

axios处理特大数据碰到的问题

碰到问题:

    axios在处理服务器特大数据时如:

"id": 1323890743432970240

json字符串时默认使用的是JSON.parse()api进行对象转换 ,但问题出现了Javascript只能精确保存安全数字内的数组 即:-2^53到2^53 内的整数数据,当转换后这个数字就发生了改变,如图

       这是直接在浏览器console面板输入的值,发现无法精确保存这种数字,也就是用这个id获取后台数据时会发生错误,经常报404,不改的话显向就是随机的正确性,偶然保存正确,这很明显不是我们想要的效果。

解决的原理

        通过算法将这种大数字转换为字符串或者是对象都写就是不能是数字,并且不可以绕过这种规则

使用第三方的包解决:         json-bigint

官方示例:

输入:

var JSonbig = require('json-bigint');

var json = '{ "value" : 9223372036854775807, "v2": 123 }';
console.log('Input:', json);
console.log('');

console.log('node.js built-in JSON:');
var r = JSON.parse(json);
console.log('JSON.parse(input).value : ', r.value.toString());
console.log('JSON.stringify(JSON.parse(input)):', JSON.stringify(r));

console.log('nnbig number JSON:');
var r1 = JSONbig.parse(json);
console.log('JSONbig.parse(input).value : ', r1.value.toString());
console.log('JSONbig.stringify(JSONbig.parse(input)):', JSONbig.stringify(r1));

 输出:

Input: { "value" : 9223372036854775807, "v2": 123 }

node.js built-in JSON:
JSON.parse(input).value :  9223372036854776000
JSON.stringify(JSON.parse(input)): {"value":9223372036854776000,"v2":123}


big number JSON:
JSONbig.parse(input).value :  9223372036854775807
JSONbig.stringify(JSONbig.parse(input)): {"value":9223372036854775807,"v2":123}

但是使用时不能用它来计算,依旧是Javascript无法精确保存这种大数据,其他方面都挺好用的,解决开头说的问题只需要在axios中配置一下就行,用到了transformResponse这个配置属性:

import JSonBig from 'json-bigint'

const res = axios.create({
  // 接口的基础连接
  baseURL: 'http:// www.xxxxx.com/',
  // 自定义返回的元素数据,axios会默认用JSON.parse
  // `transformResponse` 在传递给 then/catch 前,允许修改响应数据
  transformResponse: [
    function (data) {
      // 对 data 进行任意转换处理
      try {
        return JSONBig.parse(data)
      } catch (err) {
        return data
      }
    }
  ]
})

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/585145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号