2017-04-04 169 views
0

我正在尝试设置与Quickbooks的webhook和测试我使用JSON的示例,他们将发布到webhook。从webhook解析json

的JSON的格式如下:

{ 
    "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" 
      }] 
     } 
    }] 
} 

使用JavaScript,我试图解析它一对夫妇的方式,但我一直陷在实体部分。

尝试1: 有了这个尝试,我得到一个错误,说明长度未定义,这导致我尝试下一次尝试。

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

尝试2: 我没有得到错误如上,但任何事情我尝试访问下面的实体是不确定的。

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

回答

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

完美!您能否简要说明为什么/如何运作? –

+1

第一个循环遍历'eventNotifications'数组,为了便于阅读,我在变量'eventNotification'中存储了要在第二个循环中使用的每个'eventNotifications'对象。第二个循环遍历'entitities'数组,您可以直接访问它,因为'dataChangeEvent'是一个对象:'eventNotification.dataChangeEvent.entities'。希望能帮助到你 :) –