首页 > 解决方案 > 找一个空数组,修改json

问题描述

您能否对函数调用部分 checkAndFixNullArray 提供提示/指导。我正在检查输入 json 是否有任何空数组(本例中的兄弟姐妹)。如果任何空数组输出 json 应该吐出该数组,如下所示:

"siblings": [{
  "array": "empty"
}]

json 的其余部分应按原样传递。这是输入的json(示例)

{  
   "request":{  
      "requestTag":{  
         "trigger":"abc",
         "datapoweruser":"german"
      },
      "enduser":{  
         "first":"mansoor",
         "last":"ali",
         "gender":"male",
         "siblings":[],
         "values":[  
            {  
               "ab":"alphabets"
            }
         ]
      }
   }
}

输出json

{  
   "request":{  
      "requestTag":{  
         "trigger":"abc",
         "datapoweruser":"german"
      },
      "enduser":{  
         "first":"mansoor",
         "last":"ali",
         "gender":"male",
         "siblings":[
         {
         "array":"empty"
         }

         ],
         "values":[  
            {  
               "ab":"alphabets"
            }
         ]
      }
   }
}

我尝试过的代码(用于将所有 json 对象复制到输出)。我认为功能 checkAndFixNullArray 中的一个小改动将解决这个问题。但是我不确定使用哪个检查来查看数组对象是否为空

var what = Object.prototype.toString;

function walkObj(obj, fn) {
  var wo = what.call(obj);
  if (wo == "[object Object]") {
    Object.keys(obj).forEach(function(key){
      fn(obj, key);
      var item = obj[key], w = what.call(item);
      if (w == "[object Object]" || w == "[object Array]") {
        walkObj(item, fn);
      }
    });
  }
  else if (wo == "[object Array]") {
    obj.forEach(function(item, ix) {
      fn(obj, ix);
    });
    obj.forEach(function(item, ix) {
      var w = what.call(item);
      if (w == "[object Object]" || w == "[object Array]") {
        walkObj(item, fn);
      }
    });
  }
}

function checkAndFixNullArray(parent, key) {
  var value = parent[key], w = what.call(value);
  if ((w == "empty[object Array]")) {
    parent[key] = null;
  }
}
walkObj(json, checkAndFixNullArray);

标签: javascriptarraysjson

解决方案


这将非常简单JSON.stringify- 只需检查有问题的值是否为数组且为空,如果是,则将{ array: empty }对象添加到其中(丢弃序列化):

const input = {  
   "request":{  
      "requestTag":{  
         "trigger":"abc",
         "datapoweruser":"german"
      },
      "enduser":{  
         "first":"mansoor",
         "last":"ali",
         "gender":"male",
         "siblings":[],
         "values":[  
            {  
               "ab":"alphabets"
            }
         ]
      }
   }
};

JSON.stringify(
  input,
  (key, val) => {
    if (Array.isArray(val) && val.length === 0) {
      val.push({ array: "empty" });
    }
    return val
  }
);
console.log(input);


推荐阅读