2017-09-15 95 views
0

我是JSON和jQuery的新手。我正在做的是从api获取JSON对象并将其显示为表格。但JSON数组中的某些元素为空使用空JSON对象处理

例如; 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'); 
}); 

这样的事情是,他们将得到错误:

Cannot read property 'last' of null ; Cannot read property 'number' of null

因为在第二个和第三个元素中,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为年龄)。我只是想知道是否有任何优雅的方法可以为所有人完成一项功能?

+1

请总结一下就是:

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

然后,你可以按如下方式使用它确切的问题。你想遍历这个JSON数组还是你得到任何空值? – Arora20

+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'); 
}); 
+0

Fanstatic,它的工作原理。谢谢 –

+0

对不起,但你能帮我解释这种逻辑,我很困惑它如何工作 –

+0

'(data.name && data.name.last)'意味着只有'data.name'存在,那么下一个' data.name.last'将会运行,如果存在,此语句将返回'data.name.last'的值,否则将返回'data.name'的值; – JiangangXiong

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'); 
}); 
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'); 
    }); 
+0

谢谢大家,这个也有效,这是一个条件运算符吗? –

+0

这是内联的if,else函数。使其更短,更清洁,更易于在此代码中读取 –

+0

,您首先要确保存在data.name或data.age。如果是这样,那么你检查data.name.last或data.age.number是否存在,如果他们这样做,那么你在'?'后面返回语句。否则你在':'之后返回语句。这是内联if语句的简短形式。你可以在很多语言中使用它。你可以在这里阅读更多信息https://docs.microsoft.com/en-us/scripting/javascript/reference/conditional-ternary-operator-decrement-javascript –

1

我会写一个函数,使一个简单的检查空:

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