Javascript 将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": {},

我有一些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项上,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);