转换JSON空数组空字符串
问题描述:
我有一些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]
推入我的值集合中。
有没有办法让这些项目为空字符串而不是对象?
答
你可以使用:
...
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);
答
$.each(data, function(key, value) {
var innerArr = [];
$.each(value, function(innerKey, innerValue) {
if (typeof innerValue == 'object') {
innerValue = '';
}
innerArr.push(innerValue);
});
valueArr.push(innerArr);
});
答
仅供参考,您可以使用.parseJSON功能,得到的结果很容易
var obj = jQuery.parseJSON('{"ST":"Security"}');
alert(obj.ST === "Security");
答
是什么内部循环为?它循环String值的每个单个字母。
$.each(data, function(key, value) {
var innerArr = [];
if (jQuery.isEmptyObject(value)) {
value = '';
}
...
});
反正你可以使用jQuery.isEmptyObject()来轻松地测试,如果值是一个空的对象,并将其修改为空字符串。
答
$.each(data, function(key, value) {
var innerArr = [];
$.each(value, function(innerKey, innerValue) {
innerArr.push(innerValue);
});
//valueArr.push(innerArr);
valueArr.push(innerArr.join());
});
答
$.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);
其实,这不是'空的JSON数组''但是空的JSON对象',区别在括号'[]'(array),'{}'(objec t) –
在JSON中,一个数组由'[“value0”,“value1”]和一个对象用'{“key0”:“value0”,“key1”:“value1”}表示。 .json.org/ –