处理null JSON对象

时间:2017-09-15 07:52:28

标签: javascript jquery json jira

我是JSON和jQuery的新手。我正在做的是从api获取JSON对象并将其显示为表。但是JSON数组中的一些元素是null

例如; JSON数组如下所示:

[
  {"key":"first" , "name" :{"last":"Owen"} , "age" :{"number": 18} },
  {"key":"second" , "name" : null , "age" :{"number": 20}  } ,
  {"key":"third" , "name" : {"last":"Jay"} , "age" :null }
]

所以要输入到表格,我这样做:

$.each(jsonarray, function(i,data){
 $("<tr>").append(
   $.('<td>').text(data.key),
   $.('<td>').text(data.name.last),
   $.('<td>').text(data.age.number)).appendTo('.table');
});

所以他们会得到错误:

  

无法读取null的属性'last';无法读取null的属性'number'

因为在第二个和第三个元素中,name为null,age为null。因此,添加name.lastage.number是不可能的。

我想要的是每当他们得到类似的东西时,他们会自动返回“无信息”以添加到表格中

但是,我仍然不知道该怎么做。我确实尝试编写一个函数进行检查。例如:

    function check1(datum){
    if (datum !== null && datum !== undefined){
        return datum.last;
    }
    else {
        return "No Information"
    }
}
    function check2(datum){
    if (datum !== null && datum !== undefined){
        return datum.number;
    }
    else {
        return "No Information"
    }
}

但这非常繁琐,因为我需要编写2个单独的函数来检查(1代表名称,1代表年龄)。我只是想知道是否有任何优雅的方式为所有人做一个功能?

4 个答案:

答案 0 :(得分:1)

这可以满足您的需求吗?

var noDataTip = 'No Information';
$.each(jsonarray, function(i,data) {
    $("<tr>").append(
    $('<td>').text(data.key),
    $('<td>').text( (data.name && data.name.last) || noDataTip),
    $('<td>').text( (data.age && data.age.number)) || noDataTip).appendTo('.table');
});

答案 1 :(得分:1)

试试这个。 :)

$.each(jsonarray, function(i,data){
    if(data.key === undefined || data.key === null){
        data.key = 'none';
    }
    if(data.name === undefined || data.name === null){
        data.name = 'none';
    }
    if(data.age === undefined || data.age === null){
        data.age = 'none';
    }
    $("<tr>").append(
        $.('<td>').text(data.key),
        $.('<td>').text(data.name.last),
        $.('<td>').text(data.age.number)
    ).appendTo('.table');
});

答案 2 :(得分:1)

    $.each(jsonarray, function(i,data){
        $("<tr>").append(
        $.('<td>').text(data.key),
        $.('<td>').text( data.name && data.name.last ? data.name.last : "No Information"),
        $.('<td>').text( data.age && data.age.number ?
 data.age.number : "No Information").appendTo('.table');
    });

答案 3 :(得分:1)

我会写一个函数来简单检查null:

function checkForNull(item) {
var data = "No information";
  if(!item === null) {
     data = item;
   }    
   return data;    
}

然后您可以按如下方式使用它:

$.('<td>').text(checkForNull(data.key))