2015-06-11 5 views
0

Я использую классический ASP и ASPJSON (http://www.aspjson.com/), чтобы попытаться пройти через тестовые данные JSON, возвращенные через WebHook Mandrill.Looping через JSON using ASPJSON

Это пример данных JSON - я понимаю, что второй блок совпадает с первым, но мне нужно использовать его, поскольку, когда я это делаю в живой системе, данные webhook будут возвращаться партиями в одном JSON файл/сообщение.

{ 
    "event":"hard_bounce", 
    "msg":{ 
    "ts":1365109999, 
    "subject":"This an example webhook message", 
    "email":"[email protected]", 
    "sender":"[email protected]", 
    "tags":[ 
     "webhook-example" 
    ], 
    "state":"bounced", 
    "metadata":{ 
     "user_id":111 
    }, 
    "_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa", 
    "_version":"exampleaaaaaaaaaaaaaaa", 
    "bounce_description":"bad_mailbox", 
    "bgtools_code":10, 
    "diag":"smtp;550 5.1.1 The email account that you tried to reach does not exist. Please try double-checking the recipient's email address for typos or unnecessary spaces." 
    }, 
    "_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa", 
    "ts":1433940242 
}, 
{ 
    "event":"hard_bounce", 
    "msg":{ 
    "ts":1365109999, 
    "subject":"This an example webhook message", 
    "email":"[email protected]", 
    "sender":"[email protected]", 
    "tags":[ 
     "webhook-example" 
    ], 
    "state":"bounced", 
    "metadata":{ 
     "user_id":111 
    }, 
    "_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa1", 
    "_version":"exampleaaaaaaaaaaaaaaa", 
    "bounce_description":"bad_mailbox", 
    "bgtools_code":10, 
    "diag":"smtp;550 5.1.1 The email account that you tried to reach does not exist. Please try double-checking the recipient's email address for typos or unnecessary spaces." 
    }, 
    "_id":"exampleaaaaaaaaaaaaaaaaaaaaaaaaa1", 
    "ts":1433940242 
} 

В моей тестовой ASP странице, я попытался простой тест (я уже подтвердил данные в формате JSON является действительным, сохранив его в базу данных и проверки содержания)

<!--#INCLUDE file="aspJSON.asp" --> 
str2 = <POST DATA FROM MANDRILL> 
Set oJSON = New aspJSON 
oJSON.loadJSON(str2) 

Response.Write oJSON.data("event") & "<hr>" 
response.write "<h1>test</h1>" 

For Each phonenr In oJSON.data("msg") 
    Set this = oJSON.data("msg").item(phonenr) 
    Response.Write _ 
    this.item("subject") & ": " & _ 
    this.item("diag") & "<br>" 
Next 

Когда Mandrill называет ASP, он возвращает эту ошибку:

Описание: Объект не коллекция:.

Для этой линии: Для каждого phonenr В oJSON.data («сообщение»)

Я застрял рабочих, как, для каждого события, я могу цикл через него и получить атрибуты из «MSG» и значение «_id».

+0

Этот вопрос уже задан - http://stackoverflow.com/q/30538292/692942. просто ОП не удосужился принять ответ, поэтому я не могу отметить это как дубликат. – Lankymart

+0

@ Lankymart благодарит за ваш ответ. Глядя на другую запись, с которой вы связались, ваш ответ о том, как добраться, в этом примере, PitcherID, должен был спросить, имеет ли OP доступ к управлению структурой JSON. В моем случае у меня нет доступа к этому, поскольку я беру данные прямо из Mandrill. Как это имеет место, есть ли способ получить доступ к данным в двух блоках данных JSON? Спасибо – 4532066

+0

@ Lankymart Для дубликата необходимо либо принять принятый ответ, либо сохранить его. Поэтому, если вы считаете, что ответ на другой вопрос верен, переверните его, а затем отметьте как дубликат. – Dijkgraaf

ответ

1

Оберните str2 так, чтобы он был действительной коллекцией JSON и обновил ваш код, чтобы перебрать эту коллекцию, как показано ниже.

<!--#INCLUDE file="aspJSON.asp" --> 
str2 = <POST DATA FROM MANDRILL> 

' Wrap str2 to turn it into a collection 
str2 = "{""events"":[" & str2 & "]}" 

Set oJSON = New aspJSON 
oJSON.loadJSON(str2) 

response.write "<h1>test</h1>" 

For Each eventrec In oJSON.data("events") ' Iterate through events 
    Set this = oJSON.data("events").item(eventrec).item("msg") ' select msg in each eventrec 
    Response.Write _ 
    this.item("subject") & ": " & _ 
    this.item("diag") & "<br>" 
Next