2011-10-03 145 views
2

我有一些JSON,看起来像这样:转换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]推入我的值集合中。

有没有办法让这些项目为空字符串而不是对象?

+1

其实,这不是'空的JSON数组''但是空的JSON对象',区别在括号'[]'(array),'{}'(objec t) –

+0

在JSON中,一个数组由'[“value0”,“value1”]和一个对象用'{“key0”:“value0”,“key1”:“value1”}表示。 .json.org/ –

回答

1

你可以使用:

... 
if(typeof innerValue == "object") innerValue = JSON.stringify(innerValue); 
valueArr.push(innerValue); 
.... 

JSON对象的stringify方法变成一个对象转换为字符串。空物件{}将打开"{}"。如果你想添加一个空字符串,而不是使用:

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); 
+0

这也可以吗? 'if(!innerValue){innerArr.push(innerValue); }' – alykhalid

+0

一个对象总是会评估为真。非空字符串和整数!= 0也将评估为true。简而言之,你的建议无效。 –

+0

感谢您澄清这一点。 – alykhalid

1
$.each(data, function(key, value) { 
    var innerArr = []; 
    $.each(value, function(innerKey, innerValue) { 
     if (typeof innerValue == 'object') { 
      innerValue = ''; 
     } 
     innerArr.push(innerValue); 
    }); 
    valueArr.push(innerArr); 
}); 
1

仅供参考,您可以使用.parseJSON功能,得到的结果很容易

var obj = jQuery.parseJSON('{"ST":"Security"}'); 
alert(obj.ST === "Security"); 
0

是什么内部循环为?它循环String值的每个单个字母。

$.each(data, function(key, value) { 
    var innerArr = []; 
    if (jQuery.isEmptyObject(value)) { 
     value = ''; 
    } 
    ... 
}); 

反正你可以使用jQuery.isEmptyObject()来轻松地测试,如果值是一个空的对象,并将其修改为空字符串。

0
$.each(data, function(key, value) { 
    var innerArr = []; 
    $.each(value, function(innerKey, innerValue) { 
     innerArr.push(innerValue); 
    }); 
    //valueArr.push(innerArr); 
    valueArr.push(innerArr.join()); 
}); 
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);