显示在JSON文件
我试图筛选,我需要为我的项目的数据。每$结束不确定的(我只想只有日期)。我设法遍历JSON对象并显示它。唯一的问题是,在循环结束时,它显示未定义。我不知道我为什么做错了。这里是我做过什么显示在JSON文件
JS文件
console.clear();
$.ajax({
async: true,
dataType: "json",
url: "https://api.myjson.com/bins/n1cwx",
success: function(data) {
$.each(data, function (i, object) {
//console.log(data);
//console.log(object);
$("body").append("<p>" + object.last_activity_at + "</p>");
});
}
});
输出
2017-06-09T17:49:49.975+12:00
2017-07-13T08:59:20.023+12:00
2017-05-29T14:17:18.148+12:00
2017-05-21T22:19:07.951+12:00
2017-06-09T13:59:50.464+12:00
2017-06-13T08:18:30.340+12:00
2017-07-27T12:41:17.423+12:00
undefined
https://codepen.io/anon/pen/gxyZXm
感谢一个例子!
在JSON数据的最后一个元素是不是一个对象,它是:
pages: "1"
因此,object.last_activity_at
是不确定的。
一种解决方法是:
$.each(data, function (i, object) {
if(!object.last_activity_at) return;
$("body").append("<p>" + object.last_activity_at + "</p>");
});
thansk这么多!这工作正常。我真的没有太多的控制与JSON文件的内容,所以真的需要一个工作。几分钟后会接受你的答案。再次感谢! –
您的JSON是不是数组:
{
"0": {
"id": 34,
"description": "A collection of in houses",
"default_branch": "master",
"tag_list": [],
"created_at": "2017-02-28T15:02:49.756+13:00",
"last_activity_at": "2017-06-09T17:49:49.975+12:00",
"shared_runners_enabled": true,
"lfs_enabled": true,
"creator_id": 13,
"namespace": {
"id": 99,
"parent_id": 98
},
"star_count": 0,
"forks_count": 0,
"open_issues_count": 0,
"public_builds": true,
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false,
"request_access_enabled": false,
"only_allow_merge_if_all_discussions_are_resolved": false,
"permissions": {
"project_access": null,
"group_access": {
"access_level": 40,
"notification_level": 3
}
}
},
"1": {
"id": 38,
"description": "Scripts",
"default_branch": "master",
"tag_list": [],
"created_at": "2017-02-28T15:05:40.505+13:00",
"last_activity_at": "2017-07-13T08:59:20.023+12:00",
"shared_runners_enabled": true,
"lfs_enabled": true,
"creator_id": 13,
"namespace": {
"id": 99,
"parent_id": 98
},
"star_count": 0,
"forks_count": 0,
"open_issues_count": 0,
"public_builds": true,
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false,
"request_access_enabled": false,
"only_allow_merge_if_all_discussions_are_resolved": false,
"permissions": {
"project_access": null,
"group_access": {
"access_level": 40,
"notification_level": 3
}
}
},
"2": {
"id": 49,
"description": "Dashboard",
"default_branch": "master",
"tag_list": [],
"created_at": "2017-04-26T14:50:59.051+12:00",
"last_activity_at": "2017-05-29T14:17:18.148+12:00",
"shared_runners_enabled": true,
"lfs_enabled": true,
"creator_id": 14,
"namespace": {
"id": 99,
"parent_id": 98
},
"star_count": 0,
"forks_count": 0,
"open_issues_count": 0,
"public_builds": true,
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false,
"request_access_enabled": false,
"only_allow_merge_if_all_discussions_are_resolved": false,
"permissions": {
"project_access": null,
"group_access": {
"access_level": 40,
"notification_level": 3
}
}
},
"3": {
"id": 51,
"description": "",
"default_branch": "master",
"tag_list": [],
"created_at": "2017-05-18T16:33:48.041+12:00",
"last_activity_at": "2017-05-21T22:19:07.951+12:00",
"shared_runners_enabled": true,
"lfs_enabled": true,
"creator_id": 19,
"namespace": {
"id": 24,
"parent_id": null
},
"avatar_url": null,
"star_count": 0,
"forks_count": 0,
"open_issues_count": 0,
"public_builds": true,
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false,
"request_access_enabled": false,
"only_allow_merge_if_all_discussions_are_resolved": false,
"permissions": {
"project_access": {
"access_level": 40,
"notification_level": 3
},
"group_access": null
}
},
"4": {
"id": 60,
"description": "",
"default_branch": "master",
"tag_list": [],
"created_at": "2017-06-09T13:59:50.464+12:00",
"last_activity_at": "2017-06-09T13:59:50.464+12:00",
"shared_runners_enabled": true,
"lfs_enabled": true,
"creator_id": 14,
"namespace": {
"id": 99,
"parent_id": 98
},
"star_count": 0,
"forks_count": 0,
"open_issues_count": 0,
"public_builds": true,
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false,
"request_access_enabled": false,
"only_allow_merge_if_all_discussions_are_resolved": false,
"permissions": {
"project_access": null,
"group_access": {
"access_level": 40,
"notification_level": 3
}
}
},
"5": {
"id": 62,
"description": "Mattermost Android App",
"default_branch": "master",
"tag_list": [],
"created_at": "2017-06-13T08:18:30.340+12:00",
"last_activity_at": "2017-06-13T08:18:30.340+12:00",
"shared_runners_enabled": true,
"lfs_enabled": true,
"creator_id": 13,
"namespace": {
"id": 99,
"parent_id": 98
},
"star_count": 0,
"forks_count": 0,
"open_issues_count": 0,
"public_builds": true,
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false,
"request_access_enabled": false,
"only_allow_merge_if_all_discussions_are_resolved": false,
"permissions": {
"project_access": null,
"group_access": {
"access_level": 40,
"notification_level": 3
}
}
},
"6": {
"id": 283,
"description": "",
"default_branch": null,
"tag_list": [],
"created_at": "2017-07-24T16:08:01.893+12:00",
"last_activity_at": "2017-07-27T12:41:17.423+12:00",
"shared_runners_enabled": true,
"lfs_enabled": false,
"creator_id": 23,
"namespace": {
"id": 99,
"parent_id": 98
},
"star_count": 0,
"forks_count": 0,
"open_issues_count": 1,
"public_builds": true,
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false,
"request_access_enabled": false,
"only_allow_merge_if_all_discussions_are_resolved": false,
"permissions": {
"project_access": null,
"group_access": {
"access_level": 40,
"notification_level": 3
}
}
},
"pages": "1"
}
这是发生在有这种情况发生是数字串几个属性的对象,再加上一个属性名为'网页'。 $.each()
通过地图的所有键,包括“页”循环。
途径SOVE问题是:
- 您可以生成一个不太混乱JSON,这将节省你从未来的头痛;
- 你可以事先筛选键,选择只有数字的人;
- ,你可以,也许,里面
each()
检查如果该键是一个字符串; - 另一种选择,前面已经提到别人,会跳过没有你所需要的关键的对象。
但这并不能解释或解决问题。 –
您的API正在将最后一个属性添加到响应中(页面:1)。这将您的对象数组转换为一个带键的对象。正因为如此,现在你的循环解析“页面”作为它的最终对象不是有你正试图注入HTML的属性,因此undefined。
解决您的阵列,或忽略在循环的最后一个对象的值。
{ "pages":"1" } // No last_activity_at property here.
您有一个包含7个对象的对象,并在最后一个键/值对,所以你的错误:
{
"0":{ },
"1":{ },
"2":{ },
"3":{ },
"4":{ },
"5":{ },
"6":{ },
"pages":"1"
}
你应该检查,以确保每个对象实际上包含last_activity_at
尝试之前访问它:
if (typeof object !== 'undefined' && object.hasOwnProperty('last_activity_at')) {
$("body").append("<p>" + object.last_activity_at + "</p>");
}
您的数组中包含这样的对象:
正如你所看到的最后一个项目是
pages : 1 // causing problem
因此最后一个项目来为未定义。所以,要么去除pages : 1
或这样做:
console.clear();
$.ajax({
async: true,
dataType: "json",
url: "https://api.myjson.com/bins/n1cwx",
success: function(data) {
$.each(data, function (i, object) {
if(object.last_activity_at)
$("body").append("<p>" + object.last_activity_at + "</p>");
});
}
});
它可以是API的有板有眼“未定义”回来了?似乎你的代码没有问题,但当日期提交到数据库时可能出现错误? – Maartje