2017-04-04 8 views
0

私はQuickbooksでWebhookを設定しようとしています。テストのために、Webhookに投稿するJSONのサンプルを使用しています。次のようにJSONのwebhookからjsonを解析する

形式は次のとおりです。 JavaScriptを使用して

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

、私はそれをカップルの方法を解析しようとしましたが、私は実体部に立ち往生続けます。

試行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'の2番目のループで使用される各 'eventNotifications'オブジェクトを保存しました。 2番目のループは 'entitities'配列に対して反復処理を行います。' dataChangeEvent'はオブジェクトである 'eventNotification.dataChangeEvent.entities'であるため、直接アクセスすることができます。それが役に立てば幸い :) –