我正试图用JSON.parse()来解决大数字问题。我知道为什么会这样,但我正在寻找它。
我在想一个可以解析JSON文本的正则表达式,并将所有大的内容转换成字符串。
我在Windows 8应用程序中使用JavaScript,它必须在客户端处理。
到目前为止让我难过。
主要问题是我收到XMLHTTPRequest的响应并且无法更改JSON的原始格式后必须执行此操作
e.g
{ "data" : {
"username":"Brad", "userID":941022167561310208, "location":"London"
}
}
答案 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",')
答案 2 :(得分:2)