2017-03-22 2 views
0

Sehr neu zu coffeescript, ich curling die API von ServiceNow, um Informationen aus und zurück zu einem Chat zurückzugeben. Ich kämpfe die JSON-Antwort mit Parsen obwohl, wie es kommt wieder nicht definiert, nicht sicher, was los ist:JSON.parse (stdout) von curl in hubot coffeescript gibt undefined

snurl = '"https://companyname.service-now.com/api/now/table/incident?sysparm_query=number%3D' + snincmagic + '&sysparm_fields=number%2Csys_id&sysparm_limit=10"' 
snpayload = '--request GET -H "Content-Type: application/json" --header "Accept: application/json" ' + " --user 'username':'password'" 
tixcurlhack = require "child_process" 
tixcurlhack.exec "/usr/bin/curl #{snpayload} #{snurl}", (error, stdout, stderr) -> 
    if error 
    msg.send "Error: #{error.code} - #{stderr}" 
    else 
    jsonresponsedata = JSON.parse(stdout) 
    incidentnumber = jsonresponsedata.result.number 
    incidentsysid = jsonresponsedata.result.sys_id 

aber auch wenn stdout die JSON enthält, incidentsysid als undefiniert zurück kommt:

 msg.send "stdout is: " + stdout 
     msg.send "jsonresponsedata is: " + jsonresponsedata 
     msg.send "incidentsysid is: " + incidentsysid 

> incidentsysid is: undefined. 
> jsonresponsedata is: [object Object] 
> stdout is: {"result":[{"number":"INC0010689","sys_id":"acb09c8fdb65324063447aecbf96192a"}]} 

Gibt es etwas Offensichtliches, das ich hier tun sollte, um result.number und result.sys_id in ihre Variablen zu bekommen?

Antwort

1

Sieht aus wie die JSON OK analysiert wird, aber Sie es falsch zugreifen:

jsonresponsedata = { 
    result: [ 
    { 
     number: "INC0010689", 
     sys_id: "acb09c8fdb65324063447aecbf96192a" 
    } 
    ] 
} 

So die Nummer für den Zugriff auf und sys_id sollten Sie verwenden:

> stdout is: {"result":[{"number":"INC0010689","sys_id":"acb09c8fdb65324063447aecbf96192a"}]} 

Wird zu analysiert werden:

incidentnumber = jsonresponsedata.result[0].number 
incidentsysid = jsonresponsedata.result[0].sys_id 
+1

Das war genau das, was benötigt wurde, danke! Ich habe gerade mehr über die Syntax gelernt; Der letzte JSON, den ich analysierte, hatte keine eckigen Klammern, also enthielt er kein Array. Dieser muss auf den Array-Index zugreifen ... _Space-Klammern halten Arrays_ –