2017-04-04 15 views
0

Ich versuche, einen Webhook mit Quickbooks einzurichten und zum Testen verwende ich eine Probe des JSON, die sie auf den Webhook posten werden.Parsing Json von Webhook

Das Format des JSON ist wie folgt:

{ 
    "eventNotifications":[ 
    { 
     "realmId":"1185883450", 
     "dataChangeEvent": 
     { 
      "entities":[ 
      { 
       "name":"Customer", 
       "id":"1", 
       "operation":"Create", 
       "lastUpdated":"2015-10-05T14:42:19-0700" 
      }, 
      { 
       "name":"Vendor", 
       "id":"1", 
       "operation":"Create", 
       "lastUpdated":"2015-10-05T14:42:19-0700" 
      }] 
     } 
    }] 
} 

Mit Javascript, ich versuchte es ein paar Möglichkeiten zu analysieren, aber ich immer auf der Entitäten Teil stecken zu bleiben.

Versuch 1: Mit diesem Versuch bekomme ich einen Fehler, dass die Länge nicht definiert ist, was mich dazu brachte, den nächsten Versuch zu versuchen.

for (var i = 0; i < req.body.eventNotifications.length; i++) { 

    // Works fine 
    realmId.push(req.body.eventNotifications[i].realmId); 

    for (var j = 0; j < req.body.eventNotifications[i].dataChangeEvent.entities.length; j++) { 
     // length is undefined 
    } 
} 

Versuch 2: Ich habe nicht den Fehler wie oben, aber alles, was ich versuche, unter Entitäten zugreifen nicht definiert ist.

for (var i = 0; i < req.body.eventNotifications.length; i++) { 

    // Works fine 
    realmId.push(req.body.eventNotifications[i].realmId); 

    for (var j = 0; j < req.body.eventNotifications[i].dataChangeEvent.length; j++) { 
     // Anything I try to access is undefined 
     var test = req.body.eventNotifications[i].dataChangeEvent[j].entities.name; 
    } 
} 

Antwort

1
for (var i = 0; i < req.body.eventNotifications.length; i++) { 

    // Works fine 
    realmId.push(req.body.eventNotifications[i].realmId); 

    var eventNotification = req.body.eventNotifications[i]; 

    for (var j = 0; j < eventNotification.dataChangeEvent.entities.length; j++) { 
     var entityName = eventNotification.dataChangeEvent.entities[j].name; 
    } 
} 
+0

Perfect! Können Sie bitte kurz erklären, warum/wie es funktioniert? –

+1

Die erste Schleife iteriert über das Array 'eventNotifications'. Aus Gründen der Lesbarkeit habe ich jedes' eventNotifications'-Objekt gespeichert, das in der zweiten Schleife in einer Variablen 'eventNotification' verwendet werden soll. Die zweite Schleife iteriert über das Array 'entities', auf das Sie direkt zugreifen können, da 'dataChangeEvent' ein Objekt ist:' eventNotification.dataChangeEvent.entities'. Ich hoffe es hilft :) –