我将在下面使用jQuery函数解析以下JSON消息。通过观察JSON消息可以看出,friends.data数组中的第二个对象没有任何“状态”项,但只有“name”和“id”,与主数组中的第一个和最后一个对象相反。然而,由于$ .each(friend.statuses,function(j,status)函数在第二个项目(没有任何“状态”条目)停止而没有进入下一个条目,因此我在解析整个Message时遇到问题(这个例子中的最后一个),它确实包含一个“状态”项。我尝试在$ .each(friend.statuses,function(j,status)函数之前和之后添加一些逻辑,以验证是否存在项目(“状态”),但没有成功。我怎么能“跳过”主数组中的第二个项目,以便第二个$ .each函数继续解析主数组,直到JSON消息结束。
Function:
$.each(response.friends.data, function(i, friend){
$.each(friend.statuses, function(j, status){
alert(status.message);
});
});
JSON Message:
{
"id": "idValue",
"friends": {
"data": [
{
"name": "NameValue",
"id": "idValue",
"statuses": {
"data": [
{
"message": "Msg1",
"updated_time": "Date",
},
{
"message": "Msg2",
"updated_time": "Date",
},
],
}
},
{
"name": "NameValue",
"id": "idValue",
}
{
"name": "NameValue",
"id": "idValue",
"statuses": {
"data": [
{
"message": "Msg1",
"updated_time": "Date",
},
{
"message": "Msg2",
"updated_time": "Date",
},
],
}
}
],
}
}
答案 0 :(得分:1)
您可以filter数组:
$.each(
response.friends.data.filter(function(){return typeof this.status!='undefined'}),
function(i, friend){
$.each(friend.statuses, function(j, status){
alert(status.message);
});
});
(如果你想与IE8兼容,请注意文档中提出的解决方案 - )
答案 1 :(得分:1)
检查当前friend
对象是否具有状态,如果没有,则继续下一个朋友。您只需执行以下操作即可:if(!friend.statuses) return;
$.each(response.friends.data, function(i, friend){
if(!friend.statuses) return;
$.each(friend.statuses, function(j, status){
alert(status.message);
});
});