循环遍历JSON键以检查其值是否为空

3

我有一个Json对象。Json键remarksaddress为空。如果它们为空,则在提取Json时打印undefine。但是我想用-符号替换空的Json。我知道我可以使用:

 if(msg.hasOwnProperty('remarks')== ""){
        alert("A");
   }

如何遍历所有键并检查其是否为空,然后用-替换而不是逐个检查。

[
{
    "id": "224",
    "booking_id": "1",
    "room_type": null,
    "no_of_rooms_booked": null,
    "check_in_date": "2014-12-23",
    "check_out_date": "2014-12-24",
    "room_id": "93",
    "hotel_id": "9",
    "status": "1",
    "user_id": "15",
    "payment_type": "",
    "payment_status": "",
    "hotelname": "sample hotel",
    "hoteladdress": "sample address",
    "hotelcontact": "056533977",
    "Id": "224",
    "full_name": "Hom Nath Bagale",
    "address": "",
    "occupation": "Student",
    "nationality": "Nepali",
    "contact_no": "9845214140",
    "email": "bhomnath@salyani.com.np",
    "remarks": "",
    "total_amount": "5000",
    "child": "0",
    "adult": "1",
    "verification_code": null,
    "roomname": "sample room2",
    "roomprice": "1.5",
    "roomdescription": "this is for demo",
    "roomimage": "2.jpg"
}]

1
使用for(var key in x)循环 - undefined
如何循环遍历所有的 JSON 数据。 - undefined
请查看以下链接:https://dev59.com/AHRB5IYBdhLWcg3wN1EQ - undefined
4个回答

7

试试这个

data.forEach(function (el) {
  Object.keys(el).forEach(function (property) {
    if (el[property] === '') {
      el[property] = '-';
    }
  });
});

示例

Object.keys() - 返回给定对象的自身可枚举属性数组


@Homnath Bagale,根据我看到的结果,remarks是存在的。 - undefined
@Homnath Bagale 如果你需要检查属性是否未定义,你可以尝试这个链接:http://jsbin.com/bineku/2/edit?js,console - undefined

3

Do

  var msg=
    {
        "id": "224",
        "booking_id": "1",
        "room_type": "",
        "roomimage": "2.jpg"
    };

 $.each(msg, function(k, v) {
         if(v===""){
           alert(k + ' is empty' + v);  
           //do actions
         }else{
            alert(k + ' is ' + v);
          }
    });

DEMO


1
您可以使用for...in循环来遍历每个属性,例如:
for (var key in msg) {
    if (msg.hasOwnProperty(key)) {
        if (msg[key] === '') {
            msg[key] = '-'
        }
    }
}

由于您已经使用了jQuery,因此您也可以使用$.each()方法,例如:

$.each(array, function (i, msg) {
    $.each(msg, function (key, value) {
        if (value === '') {
            msg[key] = '-'
        }
    })
});

0

下面我提供了两个函数,其中第一个可以处理你的整个json。第二个是一个更简单的函数,你需要传递数组中的特定元素(因为你知道你要查找的键只在数组的第一个元素中可用)。

这两种解决方案的特点是它们不会修改传递给它们的原始json

var sampleJson = [{
  "id": "224",
  "booking_id": "1",
  "remarks": "",
  "address": "",
}];

var newJson = getNonEmptyArry(sampleJson);
var newObj = getNonEmptyObj(sampleJson[0]);

console.log('newJson: ' + JSON.stringify(newJson));
console.log('newObj: ' + JSON.stringify(newObj));
console.log('Original Json ' + JSON.stringify(sampleJson));

function getNonEmptyArry(json) {
  var cpyJson = JSON.parse(JSON.stringify(json));
  cpyJson.forEach(obj => {
    Object.keys(obj).forEach(key => {
      if (obj[key] === '') {
        obj[key] = '-';
      }
    });
  });
  return cpyJson;
};

function getNonEmptyObj(obj) {
  var obj = JSON.parse(JSON.stringify(obj));
  Object.keys(obj).forEach(key => {
    if (obj[key] === '') {
      obj[key] = '-';
    }
  });
  return obj;
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接