2014-09-29 62 views
0

我想創建一個通過刪除jQuery對象和空對象,字符串來清除JSON對象的函數。

CODE:
從JSON對象中刪除jQuery和空對象

JSON.clean = function (object) { 
    /// <summary>Removes jQuery and null values from json object.</summary> 
    var filter = function (obj, doArrays) { 
     $.each(obj, function (key, value) {     
      if (value === "" || value === null) { 
       delete obj[key];     
      } else if (Object.prototype.toString.call(value) === '[object Object]') { 
       filter(value); 
      } else if (doArrays || Array.isArray(value)) { 
       obj[key] = filterArray(value); 
      } 
     }); 
     return obj; 
    }; 

    var filterArray = function (obj) { 
     var result = []; 
     for (var i = 0; i < obj.length; i++) { 
      result.push(filter(obj[i], false)); 
     } 
     return result; 
    }; 

    var result; 
    if ($.isArray(object)) { 
     result = []; 
     for (var i = 0; i < object.length; i++) { 
      result.push(filter(object[i])); 
     }    
    } else { 
     result = filter(object); 
    } 
    return result; 
}; 


問題:
試圖清理JSON對象內陣列時的代碼崩潰。
我知道改變這樣的數組是錯誤的,但這純粹是爲了在數組中使用JSON對象。
我對這個問題的建議是等到數組的清洗完成。
我不知道如何在Javascript中實現這一點,所以我希望你們中的任何人都可以幫忙!

我用這個來源的主要思路:
How do I remove all null and empty string values from a json object?

+0

是什麼* 「的代碼崩潰」 *是什麼意思?瀏覽器崩潰了嗎?代碼是否突然以錯誤結束? – 2014-09-29 17:56:21

+0

...看起來好像你在處理JavaScript對象,而不是JSON,因爲你不能用JSON而不是Array對象來表示特定的對象類型。 – 2014-09-29 17:57:08

+0

當我運行這個代碼使用jQuery 2.1.0我得到的錯誤是在JavaScript庫中未定義,這發生在試圖調用清理數組的遞歸函數時。 – 2014-09-29 21:14:58

回答

0

您可以使用JSON.stringify,替代品的方法來轉換爲字符串,刪除空,然後從字符串轉換回JSON。

  1. 將對象(具有空值)轉換爲字符串= JSON.stringify(obj,param ...);
  2. back to object = JSON.parse(「string value」);

一些有用的鏈接

  1. Recursively remove null values from JavaScript object
  2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
+0

這不僅僅是刪除null和jQuery對象。並沒有一個完整的序列化後解析結果看起來像矯枉過正? – 2014-09-29 17:55:45

+0

@squint,它取決於對象的大小。我只是提出一種實現的方式。如果對象的大小更小,並且空值更多,那麼我認爲,這是一個好的方法,說什麼? – 2014-09-29 17:57:49

+0

是的,對於小物體,差別不會被注意到。 – 2014-09-29 18:00:00

-1
var reqArr = { 
    "a": { 
    "id": "1", 
    "name": '', 
    "first_name": "Jason", 
    "last_name": "Davis", 
    "is_admin": "1", 
    "gravatar": "31b64e4876d603ce78e04102c67d6144" 
}, 
"b": '', 
"c": { 
    "id": "1702c3d0-df12-2d1b-d964-521becb5e3ad", 
    "name": "Jeff", 
    "first_name": "", 
    "last_name": "", 
    "is_admin": "1", 
    "gravatar": "5359bf585d11c5c35602f9bf5e66fa5e" 
    } 
}; 

for(var key in reqArr) { 
    if (reqArr[key] == undefined || reqArr[key] == '') { 
     delete reqArr[key]; 
    } 
    for(var inKey in reqArr[key]) { 
     if (reqArr[key][inKey] == undefined || reqArr[key][inKey] == '') { 
      delete reqArr[key][inKey]; 
     } 
    } 
}