Javascript 将JSON空数组转换为空字符串
我有一些JSON看起来像这样:Javascript 将JSON空数组转换为空字符串,javascript,jquery,json,jquery-selectors,Javascript,Jquery,Json,Jquery Selectors,我有一些JSON看起来像这样: { "ST": "Security", "C1": "Login failures", "C2": "1", "C3": {}, "P1": "2", "P2": "administrator", "P3": {},
{
"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项上,each循环将值[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);
仅供参考,您可以使用.parseJSON函数轻松获得结果
var obj = jQuery.parseJSON('{"ST":"Security"}');
alert( obj.ST === "Security" );
内环是用来做什么的?它在字符串值的每个字母上循环
$.each(data, function(key, value) {
var innerArr = [];
if (jQuery.isEmptyObject(value)) {
value = '';
}
...
});
无论如何,您可以使用()轻松地测试value是否为空对象,并将其修改为空字符串
$.each(data, function(key, value) {
var innerArr = [];
$.each(value, function(innerKey, innerValue) {
innerArr.push(innerValue);
});
//valueArr.push(innerArr);
valueArr.push(innerArr.join());
});
编辑: 如果您不想依赖jQuery的
isEmptyObject()
函数,您可以:
事实上,它不是
空JSON数组
,而是空JSON对象
,区别在于括号中的[]
(数组),{}
(对象)在JSON中,数组由[“value0”,“value1”]
表示,对象由{“key0:“value0”,“key1:“value1”}
表示,这也行吗<代码>如果(!innerValue){innerArr.push(innerValue);}对象的计算结果将始终为true。非空字符串和整数!=0也将计算为true。简言之,您的建议将不起作用。使用JSON.stringfy
,如果字符串包含此内容,您将只看到[object object]
。你能举一个显示[object object]
的例子吗?
$.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);
});
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);