2014-09-29 121 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]; 
     } 
    } 
}