将JSON空数组转换为空字符串

时间:2011-10-03 12:04:18

标签: javascript jquery json jquery-selectors

我有一些看起来像这样的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]推送到我的值集合中。

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

6 个答案:

答案 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.stringifytypeof 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());
});