我有一些看起来像这样的JSON:
{
"ST": "Security",
"C1": "Login failures",
"C2": "1",
"C3": {},
"P1": "2",
"P2": "administrator",
"P3": {},
"P4": {},
"DESCR": "failed login attempts",
"SID": "88",
"AV": "NO",
"SC": "0",
"CN": {}
}
我也有这个jQuery循环来过滤掉值:
$.each(data, function(key, value) {
var innerArr = [];
$.each(value, function(innerKey, innerValue) {
innerArr.push(innerValue);
});
valueArr.push(innerArr);
});
问题在于项目C3,P3,P4和CN在我的例子中,每个循环都将值[object Object]
推送到我的值集合中。
有没有办法让这些项空字符串而不是对象?
答案 0 :(得分:1)
您可以使用:
...
if(typeof innerValue == "object") innerValue = JSON.stringify(innerValue);
valueArr.push(innerValue);
....
stringify
对象的JSON
方法将对象转换为字符串。空对象{}
将转入"{}"
。如果要添加空字符串,请使用:
if(typeof innerValue == "object"){
innerValue = JSON.stringify(innerValue);
if(innerValue == "{}") innerValue = "";
}
valueArr.push(innerValue);
如果您100%确定对象为空,则不必使用JSON.stringify
。 typeof innerValue == "onject"
就足够了,检查您是否必须添加""
而不是innerValue
。
检查对象是否为空的另一种方法:
if(typeof innerValue == "object"){
var isEmpty = true;
for(var i in innerValue){
isEmpty = false;
break;
}
if(isEmpty) innerValue = "";
else {
//Object not empty, consider JSON.stringify
}
}
valueArr.push(innerValue);
答案 1 :(得分:1)
$.each(data, function(key, value) {
var innerArr = [];
$.each(value, function(innerKey, innerValue) {
if (typeof innerValue == 'object') {
innerValue = '';
}
innerArr.push(innerValue);
});
valueArr.push(innerArr);
});
答案 2 :(得分:1)
仅供参考,您可以使用 .parseJSON 功能轻松获得结果
var obj = jQuery.parseJSON('{"ST":"Security"}');
alert( obj.ST === "Security" );
答案 3 :(得分:1)
$.each(data, function(key, value) {
var innerArr = [];
$.each(value, function(innerKey, innerValue) {
innerValue = ($.isEmptyObject(innerValue)) ? '' : innerValue;
innerArr.push(innerValue);
});
valueArr.push(innerArr);
});
修改强>
如果您不想依赖jQuery的isEmptyObject()
功能,可以implement one yourself:
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// Get the size of an object
var size = Object.size(myArray);
答案 4 :(得分:0)
内循环是什么?它循环遍历String值的每个字母。
$.each(data, function(key, value) {
var innerArr = [];
if (jQuery.isEmptyObject(value)) {
value = '';
}
...
});
无论如何,你可以使用jQuery.isEmptyObject()轻松测试value是否为空对象并将其修改为空字符串。
答案 5 :(得分:0)
$.each(data, function(key, value) {
var innerArr = [];
$.each(value, function(innerKey, innerValue) {
innerArr.push(innerValue);
});
//valueArr.push(innerArr);
valueArr.push(innerArr.join());
});