显示在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

感谢一个例子!

+0

它可以是API的有板有眼“未定义”回来了?似乎你的代码没有问题,但当日期提交到数据库时可能出现错误? – Maartje

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

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()检查如果该键是一个字符串;
  • 另一种选择,前面已经提到别人,会跳过没有你所需要的关键的对象。
+0

但这并不能解释或解决问题。 –

您的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>"); 
} 

您的数组中包含这样的对象:

enter image description here

正如你所看到的最后一个项目是

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>");   
    }); 
    } 
});