2017-03-22 20 views
0

Coffeescriptの新機能であるServiceNowのAPIをカールして情報を取得し、チャットに戻します。hubot coffeescriptのcurlのJSON.parse(stdout)が定義されていない

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 

が、stdoutがJSONが含まれているにもかかわらず、incidentsysidは未定義として戻ってくる::私は何が起こっていることを確認、それが戻っ未定義来ているようのにJSON応答を解析していない苦労

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

result.numberとresult.sys_idを変数に取り入れるためにここで何をすべきか明らかであるか?

答えて

1

JSONはOK解析されていますが、誤ってそれをアクセスしているように見える:だから番号にアクセスし、使用する必要がありSYS_IDする

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

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

はに解析されます:

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

これはまさに必要なものでした。ありがとうございました!私は構文についてもっと学んだ。私が解析していた最後のjsonは角括弧を持たなかったので、配列は含まれていませんでした。これは配列インデックスを介してアクセスする必要があります... _小角括弧は配列を保持します_ –

関連する問題