Google Calendar嵌套JSON - 无法读取未定义

时间:2017-12-10 05:49:34

标签: javascript json nested google-calendar-api

我正在尝试从Google日历中提取所选数据,以便在客户端使用ng-repeat以表格形式显示它。在服务器端,由于缺乏对嵌套

的理解,我无法遍历数据

简化日历JSON

const calendarList = {
items: [{
    summary: 'ABC',
    start: [{ datetTime: '2017-12-10T01:40:18.000Z'}], 
    attendees: [{ displayName: 'John'}]
},
{
    summary: 'DEF',
    start: [{ datetTime: '2017-12-11T01:40:18.000Z'}], 
    attendees: [{ displayName: 'Jane'}, { displayName: 'Mary'}]
}]
};

第一层是从项目中获取项目,提取摘要开始(日期时间)与会者(displayName)。有多个与会者

console.log(calendarList.items[0].summary); //ABC
console.log(calendarList.items[0].start.dateTime); //2017-12-10T01:40:18.000Z
console.log(calendarList.items[0].attendees[0].displayName); //John

首先我将对象转换为数组,然后我可以访问项目

 var calendararray = Object.keys(calendarList)
 console.log(calendararray)

    // [ 'kind',
    // 'etag',
    // 'summary',
    // 'updated',
    // 'timeZone',
    // 'accessRole',
    // 'defaultReminders',
    // 'nextSyncToken',
    // 'items' ]

项目我写了一个for循环,这是它无法正常工作的地方。错误消息无法读取未定义的属性“长度”

for(var i = 0; i < calendararray.items.length; i++)
    {
        var items = calendarList.items[i];
        newGcal.summary += items.summary;
        newGcal.datetime += items.start.datetime;

        for(var j = 0; j < items.attendees.length; j++)
        {
            var attendees = items.attendees[j];
            newGcal.attendees += attendees.displayName;
        }
    }

我有console.log calendararray.items [0] ,其中包含摘要开始与会者的列表

console.log(calendararray.items[0])

[ 'kind',
  'etag',
  'id',
  'status',
  'htmlLink',
  'created',
  'updated',
  'summary',
  'description',
  'location',
  'creator',
  'organizer',
  'start',
  'end',
  'iCalUID',
  'sequence',
  'attendees',
  'guestsCanInviteOthers',
  'privateCopy',
  'reminders' ]

请提供任何帮助或建议

1 个答案:

答案 0 :(得分:1)

  

首先我将对象转换为数组,然后我可以访问项目

那是你出错的地方。不要把任何东西变成任何东西;您可以直接轻松地处理数据。

.forEach()对此有帮助,因此您不必编写容易出错的for循环。

以下是一个列出简化calendarList中所有数据的示例。您应该可以从此处获取实际数据中的其他相关项目。

我还重新格式化了您的calendarList数据,以使对象/数组关系更加清晰:

const calendarList = {
    items: [
        {
            summary: 'ABC',
            start: [
                { datetTime: '2017-12-10T01:40:18.000Z' }
            ],
            attendees: [
                { displayName: 'John' }
            ]
        },
        {
            summary: 'DEF',
            start: [
                { datetTime: '2017-12-11T01:40:18.000Z' }
            ],
            attendees: [
                { displayName: 'Jane' },
                { displayName: 'Mary' }
            ]
        }
    ]
};

calendarList.items.forEach( function( item ) {
    console.log( 'summary:', item.summary );
    item.start.forEach( function( dt ) {
        console.log( '  start:', dt.datetTime );
    });
    item.attendees.forEach( function( attendee ) {
        console.log( '  attendee:', attendee.displayName );
    });
});