前端使用js将json字符串转为token分词解决雪花ID丢失精度问题,替换json字符串中的所有数字为字符串数字,非正则直接替换

 作用:将json字符串通过分隔为tokens后,将数字转为字符串数字 用于前端使用js进行本地处理雪花ID精度丢失问题

由于之前的解决方式是通过正则实现的批量替换,难免在复杂的json数据结构处理时出现错误,比如json中又包含了json字符串,直接通过正则就不是很好解决了,此时完全可以通过json AST语法树或Token分词直接进行数字替换即可。

js处理雪花算法ID在前端丢失精度溢出的问题_varphp的博客-CSDN博客 这是一个正则方式 不能更好解决复杂的情况

如果实现token分词方式呢?看下面的代码

采用开源库:https://github.com/humanwhocodes/momoa

首先拉取安装:

npm install @humanwhocodes/momoa --save

# or

yarn add @humanwhocodes/momoa
const { parse } = require("@humanwhocodes/momoa");
var json_string = `{"price":3.099999998949999,"location":"31.1456,121.45798","id":15423456456465,"id":1,"id2":1.1,"id3":"123456789","id4":-100,"ids":[1,2222,3333],"ids2":[6666,888,999],"ids3":["123.457",13545,25.5],"json_data":"{\\"a\\":123,\\"b\\":\\"456\\"}"}`;

const ast = parse(json_string, { tokens: true });

ast.tokens.forEach((e,index)=>{
    if (e.type == "Number"){
        e.value = `"${e.value}"`
    }
})

//生成json字符串
var json_string = ""
ast.tokens.forEach((e,index)=>{
    json_string += e.value
})

console.log("处理后的字符串结果",json_string)
console.log("字符串结果校验",JSON.parse(json_string))

 运行结果

前端使用js将json字符串转为token分词解决雪花ID丢失精度问题,替换json字符串中的所有数字为字符串数字,非正则直接替换_第1张图片

 

通过结果来看,是没有任何问题的。

当然,如果涉及到再回传给服务器端的时候,后端接口做了数字强校验,比如状态等字段。此时需要考虑将未超过js精度的字符串数字转换为数字再去请求。在请求中间件中去自动处理字段即可

你可能感兴趣的:(笔记,前端,json,前端)