【问题标题】:Remove jQuery and null objects from JSON object从 JSON 对象中删除 jQuery 和 null 对象
【发布时间】:2014-09-29 17:43:45
【问题描述】:

我正在尝试创建一个函数,通过删除 jQuery 对象和空对象、字符串来清除 JSON 对象。

代码:

JSON.clean = function (object) {
    /// <summary>Removes jQuery and null values from json object.</summary>
    var filter = function (obj, doArrays) {
        $.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 (doArrays || Array.isArray(value)) {
                obj[key] = filterArray(value);
            }
        });
        return obj;
    };

    var filterArray = function (obj) {
        var result = [];
        for (var i = 0; i < obj.length; i++) {
            result.push(filter(obj[i], false));
        }
        return result;
    };

    var result;
    if ($.isArray(object)) {
        result = [];
        for (var i = 0; i < object.length; i++) {
            result.push(filter(object[i]));
        }            
    } else {
        result = filter(object);
    }
    return result;
};


问题:
尝试清理 JSON 对象中的数组时,代码会崩溃。
我知道像这样更改数组是错误的,但这纯粹是针对数组中的 JSON 对象。
我对这个问题的建议是等到阵列的清理完成。
我不知道如何在 Javascript 中实现这一点,所以我希望你们中的任何人都可以提供帮助!

我已将此来源用于主要思想:
How do I remove all null and empty string values from a json object?

【问题讨论】:

  • “代码崩溃”是什么意思?浏览器会崩溃吗?代码是否突然以错误结束?
  • ...看起来您正在处理 JavaScript 对象,而不是 JSON,因为您无法在 JSON 中表示除 Array 对象之外的特定对象类型。
  • 当我使用 jQuery 2.1.0 运行此代码时,我得到错误 a is undefined in the javascript library,当尝试调用递归函数来清理数组时会发生这种情况。

标签: javascript jquery arrays json filter


【解决方案1】:

您可以使用 JSON.stringify ,replacer 方法转换为字符串并删除 null,然后从字符串转换回 JSON。

  1. 将对象(具有空值)转换为字符串 = JSON.stringify(obj,param...);
  2. 返回对象 = JSON.parse("string value");

一些有用的链接

  1. Recursively remove null values from JavaScript object
  2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

【讨论】:

  • 这不仅仅是删除 null 和 jQuery 对象。并且在解析结果之后进行完整的序列化似乎不是大材小用吗?
  • @squint,这取决于对象的大小。我只是提出一种实现方法。如果对象大小更小,并且有更多的空值,那么我认为,这是一个很好的方法,怎么说?
  • 是的,对于小物体,差异不会被注意到。
【解决方案2】:
var reqArr = {
    "a": {
    "id": "1",
    "name": '',
    "first_name": "Jason",
    "last_name": "Davis",
    "is_admin": "1",
    "gravatar": "31b64e4876d603ce78e04102c67d6144"
},
"b": '',
"c": {
    "id": "1702c3d0-df12-2d1b-d964-521becb5e3ad",
    "name": "Jeff",
    "first_name": "",
    "last_name": "",
    "is_admin": "1",
    "gravatar": "5359bf585d11c5c35602f9bf5e66fa5e"
    }
};

for(var key in reqArr) {
    if (reqArr[key] == undefined || reqArr[key] == '') {
        delete reqArr[key];
    }
    for(var inKey in reqArr[key]) {
        if (reqArr[key][inKey] == undefined || reqArr[key][inKey] == '') {
            delete reqArr[key][inKey];
        }
    }
}

【讨论】:

    猜你喜欢
    • 2012-02-29
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多