簡體   English   中英

將JSON中的大數字解析為字符串

[英]Parsing big numbers in JSON to strings

我正試圖用JSON.parse()來解決大數字問題。 我知道為什么會這樣,但我正在尋找它。

我正在考慮一個正則表達式,它可以解析JSON文本並將所有大的內容轉換為字符串。

我在Windows 8應用程序中使用JavaScript,它必須在客戶端處理。

到目前為止讓我難過。

主要問題是我收到XMLHTTPRequest的響應並且無法更改JSON的原始格式后必須執行此操作

例如

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

免責聲明:

這是一個老答案,問題甚至更老。 你不應該永遠是用正則表達式解析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

如果你需要將它用作string那么只需將其保存為字符串,並帶有""

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

您還有一個錯誤的username => "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/

我知道這是一個非常古老的問題,但如果您使用npm,這是您可以使用的解決方案。 Javascript可以處理值為9007199254740991 docs的 9007199254740991 您可以使用 npm包來解析包含大數字的JSON。

安裝你的包

npm i json-bigint

然后像這樣使用它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM