什麼是從長JSON字符串中提取整數的簡單方法?從JSON字符串中提取整數?
這是非常複雜的,很長(幾KB),用眼睛掃描它似乎impossibe。 只是提取數字也不好,因爲我需要跳過這麼多的浮點數。 我知道我可以將JSON轉換爲對象並枚舉,但這看起來像是矯枉過正,因爲它可能包含對象,數組,對象等內的數組。
很好過濾一些整數,例如我需要2000和20000. 我需要這個來分析一個正在運行的程序的中間狀態。不僅我的代碼正在寫這些數據,所以我只能掃描現有的結構。
什麼是從長JSON字符串中提取整數的簡單方法?從JSON字符串中提取整數?
這是非常複雜的,很長(幾KB),用眼睛掃描它似乎impossibe。 只是提取數字也不好,因爲我需要跳過這麼多的浮點數。 我知道我可以將JSON轉換爲對象並枚舉,但這看起來像是矯枉過正,因爲它可能包含對象,數組,對象等內的數組。
很好過濾一些整數,例如我需要2000和20000. 我需要這個來分析一個正在運行的程序的中間狀態。不僅我的代碼正在寫這些數據,所以我只能掃描現有的結構。
好吧。我假設你的JSON字符串到JSON對象的解析速度更快。 我也假設你正在傳遞的JSON對象以下功能iterateAndExtractInt
:
var out = new Array();
var idx = 0;
var isInt = function(input) {
return typeof input != 'number' ? false :
(!isNaN(parseInt(input))
&& (parseFloat(input) == parseInt(input)));
}
var isArray = function(input) {
return Object.prototype.toString.call(input) === '[object Array]';
}
var isObject = function(input) {
return Object.prototype.toString.call(input) === '[object Object]';
}
var iterateAndExtractInt = function(obj) {
return (function doJob(obj) {
var process = function(value) {
if(isInt(value)) { // Add your custom validation here to allow select values
out[idx++] = value;
}
if(isArray(value)) {
value.forEach(function(entry) {
process(entry);
})
}
if(isObject(value)) {
doJob(value);
}
};
for(var key in obj) {
process(obj[key]);
}
return out;
})(obj);
}
// our test input
var inp = {a: 1, b: 1.001, c: {a: 'str', b: '33'},
d: [2,3,4], e: [{a:[5], b:{a:[{s:6},
{c:[[[[[[7,8,9,{a:[10]}]]]]],11]}]}}]};
console.log(iterateAndExtractInt(inp));
P.S:性能仍有待考驗!我不確定你的輸入字符串是什麼樣的,它有多大。
如果沒有首先看到數據的例子就不容易給出答案。
有兩種方法可以爲您提供JSON字符串的格式,即「固定列格式」或「逗號分隔」(實際上「分隔」可以是識別數據分隔的任何重複字符)。
在這兩種情況下,如果您知道JSON數據的創建者,您可以詢問創建者哪個字段代表JSON字符串中的哪一部分數據。至少你會知道數據所代表的字符串的每個部分。
否則,辛苦的工作開始通過字符串來查找,以找到定義您尋找的數字的常見特徵,例如分隔符,逗號,分號等或任何其他字符。如果這些不存在,則需要在JSON字符串中查找模式,然後圍繞該模式進行抽取。
一個使用jQuery進行逗號分隔(或任何其他常見字符)的例子;
var numValue = jsonResults.split(",");
numValue.each(function (index, value) {
if (value > 1999 && value < 19999) {
//Do whatever you want with the data
}
}
固定列格式是艱難的,因爲你需要計算其中的數據並開始在字符串中結束的行和列的位置,並建立你周圍的造型。將內容複製並粘貼到文本文件中並查看它將是該練習的開始。
祝你好運。
你能至少張貼一段摘錄嗎? – Cyrille 2013-05-01 08:12:51
爲什麼不只是解析JSON字符串並選擇你想要的部分並跳過那些不是整數的東西? – dtech 2013-05-01 08:33:36
,因爲它可能包含對象,數組,對象等內的數組 – exebook 2013-05-01 08:42:02