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

时间:2013-12-05 19:11:05

标签: javascript regex json windows

我正试图用JSON.parse()来解决大数字问题。我知道为什么会这样,但我正在寻找它。

我在想一个可以解析JSON文本的正则表达式,并将所有大的内容转换成字符串。

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

到目前为止让我难过。

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

e.g

{ "data" : {
    "username":"Brad", "userID":941022167561310208, "location":"London"
    }
}

3 个答案:

答案 0 :(得分:4)

<强>声明:

这是一个陈旧的答案,问题甚至更老。您不应该 使用正则表达式解析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);

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

修改已更新以适应列表。

以下是正则表达式:http://regex101.com/r/qJ3mD2

答案 1 :(得分:2)

如果您需要将其用作string,则只需将其保存为字符串""

{ "data" : {
    "username":"Brad", "userID":"941022167561310208", "location":"London"
    }
}

你也有一个误会username =&gt; "username"

您也可以使用parseInt()稍后将其解析为整数

有关更新的问题:那么您需要使用正则表达式""包围您的号码:

s='{"data":{"username":"Brad","userID":9410221675613105435234324235235235235235523208,"location":"London"}}';
s = s.replace(new RegExp('"userID":([0-9]+),',"g"),'"userID":"$1",')

示例:http://jsfiddle.net/E4txx/

答案 2 :(得分:2)

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

安装软件包

npm i json-bigint

然后像这样使用它。

var JSONbig = require('json-bigint');
let result = JSONbig.parse(<your-json>);