2017-09-28 19 views
0

api.aiからjsonレスポンスを取得するチャットボットを作成しようとしています。私は、jsonの応答の下からメッセージの一部を表示する必要があります。api.aiからjsonレスポンス配列からテキストを抽出する

{ 
"id": "ae66f8e4-a047-478a-8108-8b0147610f18", 
"timestamp": "2017-09-28T05:02:03.552Z", 
"lang": "en", 
"result": { 
"source": "agent", 
"resolvedQuery": "hi", 
"action": "", 
"actionIncomplete": false, 
"parameters": {}, 
"contexts": [], 
"metadata": { 
    "intentId": "d2f3c8bd-fc1b-4b6b-9d3d-08b6be93364e", 
    "webhookUsed": "false", 
    "webhookForSlotFillingUsed": "false", 
    "intentName": "greetings" 
}, 
"fulfillment": { 
    "speech": "Hi.Please enter your query.", 
    "messages": [ 
    { 
     "type": 0, 
     "speech": "Hi.Please enter your query." 
    } 
    ] 
}, 
"score": 1 
}, 
"status": { 
"code": 200, 
"errorType": "success" 
}, 
"sessionId": "saurabh" 

}

は、以下のコードのサンプル片であり、spokenResponse変数にメッセージ部から音声を取得することができません。

function prepareResponse(val) { 
    var debugJSON = JSON.stringify(val,undefined, 2); 
    var spokenResponse = val.messages.speech; 

    respond(spokenResponse); 
    debugRespond(debugJSON); 

} 

私はエラーの下に取得する:しかし

script.js:33 Uncaught TypeError: Cannot read property 'speech' of undefined 
    at prepareResponse (script.js:33) 
    at Object.success (script.js:21) 
    at i (jquery-3.2.1.min.js:2) 
    at Object.fireWith [as resolveWith] (jquery-3.2.1.min.js:2) 
    at A (jquery-3.2.1.min.js:4) 
    at XMLHttpRequest.<anonymous> (jquery-3.2.1.min.js:4) 

、私はそれが正しくフェッチ結果部からソースを取得しようとします。

var spokenResponse = val.result.source; 

私はAjaxとJsonを初めて使っています。親切に助けてください。

+0

「メッセージ」は、「フルフィルメント」のサブジェクトです。 val.fulfillment.message [0] .speechは値を受け入れるために正しいはずです。 – Auskennfuchs

+0

'.messages'はあなたが探しているオブジェクトではない配列です.messages [0] .speech' maybe? –

+0

私はvar spokenResponse = val.fulfillment.messages [0] .speech;を使ってみました。まだ同じエラー script.js:33キャッチされていないTypeError:未定義のプロパティ 'messages'を読み取ることができません –

答えて

1

フルフィルメントプロパティを使用してメッセージにアクセスする必要があります。メッセージにはオブジェクトの配列が含まれているので、最初のオブジェクトのspeechプロパティを取得するには、最初のインデックスのオブジェクトにアクセスする必要があります。あなたはすべてのメッセージを反復処理したい場合は

var spokenResponse = val.fulfillment.messages[0].speech; 

(あなたが複数のメッセージを持っていると仮定します):

var messageArr = val.fulfillment.messages; 
var speechArr = []; 
for (var i = 0; i < messageArr.length; i++) { 
    speechArr.push(messageArr[i].speech); 
} 

は、これはあなたに音声メッセージの配列を与えます。

+0

var spokenResponse = val.fulfillment.messages [0] .speech;これはまた同じエラーをスローする、私はjavascriptを介してapi.aiからjsonのresposeを取得しています。私がapi.aiのjsonのレスポンスを比較すると、私のコードを通してフェッチされたときは全く同じですが、メッセージの部分にアクセスすることはできません。私も試しました var spokenResponse = val.fulfillment.speech;成就過去にも発言はありますが、アクセスすることはできません –

+0

「プロパティのメッセージが未定義です」はJSONオブジェクトに充足プロパティがないことを意味します。あなたの関数の中でconsole.log(val)を実行し、それがあなたに何を与えるかを見てください。あなたは充実物件を見ますか? – LennieCodes

+0

以下の変更とその動作を行ったconsole.logを見て、正しい方向に案内してくれてありがとう。 var spokenResponse = val.result.fulfillment.messages [0] .speech; –

関連する問題