2017-12-10 2 views
1

Ich versuche, ausgewählte Daten aus dem Google-Kalender zu extrahieren, um sie in einem Formular mit ng-repeat auf der Clientseite anzuzeigen. Auf Sever Seite, ich bin nicht in der Lage aufgrund der Daten durchlaufen zu Unverständnis von verschachteltenGoogle Kalender verschachtelte JSON - Eigenschaft 'Länge' von undefined nicht lesen

Vereinfachte Kalender 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'}] 
}] 
}; 

Die erste Schicht ist auf Artikel innerhalb des Objekts zu erhalten, von Artikel, Auszug Zusammenfassung, Start (dateTime) und Teilnehmer (displayName). Es besteht die Möglichkeit, mehrere Teilnehmer

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 

Zuerst habe ich das Objekt Array konvertieren, von dort ich Artikel zugreifen können

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

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

Von Artikel Ich schrieb eine for-Schleife und das ist, wo es hat nicht funktioniert. Die Fehlermeldung ist kann nicht Eigenschaft ‚Länge‘ undefinierter

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

Ich habe console.log calendararray.items [0] und es gibt eine Liste mit Zusammenfassung, starten und lesen Teilnehmer

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' ] 

Bitte jede Hilfe oder Beratung

+0

Statt für (var i = 0; i cdoshi

+0

Dies funktioniert nicht @ Cdoshi, weil calendarList ein Objekt ist, so wird es die Länge zurückgeben ist undefined – miintea

Antwort

1

Zuerst konvertiere ich das Objekt Array, von dort aus kann ich Artikel zugreifen

Das ist, wo Sie schief gelaufen ist. Konvertiere nichts zu irgendetwas; Sie können problemlos direkt mit den Daten arbeiten.

.forEach() ist hilfreich für diese, so dass Sie nicht fehleranfällige for Schleifen schreiben müssen.

Hier ist ein Beispiel, das alle Daten in Ihrem vereinfachten calendarList auflistet. Sie sollten es von hier für die anderen verwandten Elemente in den tatsächlichen Daten nehmen können.

ich auch Ihre calendarList Daten ein wenig neu formatiert das Objekt/Array Beziehungen klarer zu machen:

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

+0

Danke @Michael Geary! Das ist sehr hilfreich! Ich schaffe es, es zum Laufen zu bringen.Jetzt besteht die Herausforderung darin, viele Elemente in MongoDB zu speichern – miintea

Verwandte Themen