将JSON中的大数字解析为字符串

Bra*_*son 7 javascript regex windows json

我正在尝试使用JSON.parse()舍入大数来解决该问题。我知道为什么会这样,但我正在寻找解决之道。

我在考虑一个正则表达式,可以解析JSON文本并将所有大整数转换为字符串。

我在Windows 8应用程序中使用JavaScript,它必须由客户端处理。

让我难过了

主要问题是在收到XMLHTTPRequest的响应并且无法更改JSON的原始格式后,必须执行此操作

例如

{ "data" : {
    "username":"Brad", "userID":941022167561310208, "location":"London"
    }
}
Run Code Online (Sandbox Code Playgroud)

bra*_*ipt 8

免责声明:

这是一个古老的答案,这个问题甚至更古老。你永远不应该用正则表达式解析 JSON - 它太脆弱的解决方案,并且容易随机中断。正确的做法是解析整个 JSON 字符串,然后使用代码将字符串值转换为数字,例如parseInt(jsonData.data.userID).

一个更好的方法是在您的后端修复它,这样您的客户就不必这样做了。


这是用引号包装所有整数的正则表达式。如果您只想对长字符串执行此操作,请更改+{9,}(或任何 int)。

var json = ('{"data":{"username":"Brad","userID":941022167561310208,"location":"London","test":"3908349804","test2":"This already exists in 034093049034 quotes"},"list":[3409823408,3409823408,"A list 234908234"]}');
json = json.replace(/([\[:])?(\d+)([,\}\]])/g, "$1\"$2\"$3");
json = JSON.parse(json);
Run Code Online (Sandbox Code Playgroud)

参见示例:http : //jsfiddle.net/remus/6YMYT/

编辑更新以容纳列表。

这是正在运行的正则表达式:http : //regex101.com/r/qJ3mD2

  • 解决了我 99% 的问题,我也在使用小数,所以我只需要添加到正则表达式的数字选择器部分。新的是:`json = json.replace(/([\[:])?([\d\.]+)([,\}\]])/g, "$1\"$2\"$3 ");` (2认同)

Tou*_*eer 5

我知道这是一个非常古老的问题,但如果您使用 npm,这是您可以使用的解决方案。Javascript 可以处理 bigInt 值9007199254740991 docs。您可以使用这个npm 包来解析包含大量数字的 JSON。

安装你的包

npm i json-bigint
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它。

var JSONbig = require('json-bigint');
let result = JSONbig.parse(<your-json>);
Run Code Online (Sandbox Code Playgroud)

  • 如果你已经在使用 BigNumber.js,你可以使用这个 npm 包 json-bignumber:https://www.npmjs.com/package/json-bignumber (2认同)