首页 > 解决方案 > 从 JSON 文档中删除未设置的元素

问题描述

我必须删除未知深度的 JSON 文档的空白元素。像这个:

{
    "a": {
        "a1": ""
    },
    "b": {
        "b1": "",
        "b2": {
            "b21": "",
            "b22": {
                "b22z": "",
                "b22x": ""
            },
            "b23": ""
        },
        "b3": ""
    },
    "c": "only non-empty field"
}

我认为最好的主意是使用 JSON.parse 来获取对象然后对其进行处理,所以我得到了这样的东西:

在此处输入图像描述
我在这篇文章中找到了这个功能,但它没有像我预期的那样工作:

function filter(obj) {
    $.each(obj, function(key, value){
        if (value === "" || value === null){
            delete obj[key];
        } else if (Object.prototype.toString.call(value) === '[object Object]') {
            filter(value);
        } else if ($.isArray(value)) {
            $.each(value, function (k,v) { filter(v); });
        }
    });
}

用我的对象调用该函数后,我得到一个具有空属性的对象,我不想显示它:

在此处输入图像描述

我怎样才能修改上面的代码来得到这个?我已经尝试了我所知道的一切,我要疯了......
谢谢

标签: javascriptjson

解决方案


注释中的代码不起作用,因此我将在此处再次输入:

function removeEmptyEntries(object) {
    let allEmpty = true;

    for (let item in object) {

        if (typeof object[item] == "object") {
            if(removeEmptyEntries(object[item]))
            {
                delete object[item];
            } else {
                allEmpty = false;
            }

        } else if (object[item]=="") {
            delete object[item]
        } else {
            allEmpty = false;
        }
    }

    return allEmpty;
}

警告:这是从我的头顶上做的,所以它未经测试。


推荐阅读