(一)前言
在拿到请求返回的数据的时候,不用json自带的那个parse方法,而是通过自己定义了一个json转换方法,然后再response给前端,这样一来前端拿到的数据就是一个动过手脚的json数据。
这个方法的确可以实现前端拿到的数据不出现精度丢失问题,但是再浏览器中的Preview上查看数据还是一个丢失的错误数据,这个是因为浏览器它用的还是自己原始的那个json parse方法
(二) 案例
api返回一个序列化的string,类似下面
从上面可以看出js,float会失去精度,将2440.3499999999999转为2440.35
(三) 解决方案
我们不使用浏览器的JSON.parse, 自定义个parse,将number转为string,当然我们可以借助于jison。
- 安装依赖
yarn add jison --dev
- 新建文件
jsonlint.l
代码如下
int "-"?([0-9]|[1-9][0-9]+)
exp [eE][-+]?[0-9]+