首页 > 解决方案 > 从 JQuery/Javascript 中的 JSON 对象中删除带有 NULL 的元素

问题描述

我在 StackOverflow 上看到了一些涵盖该主题的问题,但我无法使其与我找到的任何解决方案一起工作。这似乎是一个常见问题,但我怀疑我可能没有正确构建 JSON 对象。

我从表单中获取一些字段,以从数据库中的查询中获取实时原因。但是如果这些字段是空的,我仍然在 JSON 中将它们作为字段:null。

这是 Jquery 代码:

    $(document).ready(function() { 
   $('select').change(function() {       
        //var formData = JSON.stringify($("#cstates").serializeArray());

       var states = { states : $("#cstates").val(), zips : $("#czips").val()};

        //var data = JSON.stringify(states).replaceAll(".*\": null(,)?\\r\\n", "");
        //{"states":null,"zips":["91941"]}
        //str.replaceAll(".*\": null(,)?\\r\\n", "");

        alert(JSON.stringify(states));
        $.ajax({
          type: "POST",
          url: "http://localhost:8080/api/campaign/stats",
          data: JSON.stringify(states),
          cache: false,
          success: function(data){
             $("#resultarea").text(data);
          },
          dataType: "json",
          contentType : "application/json"
        });

   }); 
});

我得到了那种输出:{“states”:null,“zips”:[“91941”]},但在这种状态下拉列表为空的情况下,我想要的是{“zips”:[“91941”]}。基本上,我只想要在 HTML 表单中具有填充字段的 JSON 值。

标签: jqueryjsonajax

解决方案


// 此函数用于删除 null 或空值

 const removeEmptyOrNull = (obj) => {
  Object.keys(obj).forEach(k =>
    (obj[k] && typeof obj[k] === 'object') && removeEmptyOrNull(obj[k]) ||
    (!obj[k] && obj[k] !== undefined) && delete obj[k]
  );
  return obj;
};

$(文档).ready(函数() {

$('select').change(function() {
//var formData = JSON.stringify($("#cstates").serializeArray());

   var states = { states : $("#cstates").val(), zips : $("#czips").val()};

    //var data = JSON.stringify(states).replaceAll(".*\": null(,)?\\r\\n", "");
    //{"states":null,"zips":["91941"]}
    //str.replaceAll(".*\": null(,)?\\r\\n", "");

    alert(JSON.stringify(states));
    $.ajax({
      type: "POST",
      url: "http://localhost:8080/api/campaign/stats",
      data: JSON.stringify( removeEmptyOrNull(states) ),
      cache: false,
      success: function(data){
         $("#resultarea").text(data);
      },
      dataType: "json",
      contentType : "application/json"
    });

}); });


推荐阅读