2015-06-27 36 views
2

我正在使用hp on demand API,它將以正式查詢的形式返回一個對象。未定義的邏輯出錯

var obj = { 
    "positive": [ 
    { 
     "sentiment": "love", 
     "topic": null, 
     "score": 0.8053406931054015, 
     "original_text": "I love you", 
     "original_length": 10, 
     "normalized_text": "I love you", 
     "normalized_length": 10 
    } 
    ], 
    "negative": [], 
    "aggregate": { 
    "sentiment": "positive", 
    "score": 0.8053406931054015 
    } 
} 

,它將返回對象這樣的負查詢

{ 
    "positive": [], 
    "negative": [ 
    { 
     "sentiment": "hate", 
     "topic": null, 
     "score": -0.8748623139495181, 
     "original_text": "I hate you", 
     "original_length": 10, 
     "normalized_text": "I hate you", 
     "normalized_length": 10 
    } 
    ], 
    "aggregate": { 
    "sentiment": "negative", 
    "score": -0.8748623139495181 
    } 
} 

,我試圖財產normalized_text分配到文本,但似乎是用不確定的邏輯錯誤。這裏是我的代碼

var arr = ["I hate you", "I love you", "I miss you"]; 

var emotions = []; 

for(var i=0; i<arr.length; i++){ 

//console.log(arr[i]); 
    $.ajax({ 

    url: "https://api.idolondemand.com/1/api/sync/analyzesentiment/v1?text="+arr[i]+"&apikey=e3b26b74-bla" 

    }) 
    .done(function(data) { 
    var obj = data; 
    //emotions.push(obj.aggregate.sentiment); 
    var text; 
    if(typeof obj.positive[0].normalized_text === "undefined"){ 
     text = obj.negative[0].normalized_text; 
    }else{ 
    text = obj.positive[0].normalized_text; 
    } 

    console.log(text); 
    console.log(obj.aggregate.sentiment); 

    }); 

} 

我的錯誤是cannot read normalized_text of undefined

+3

'obj.positive [0]'尚未定義,導致對undefined.normalized_text的解析嘗試,這是一個錯誤,因爲undefined不是一個對象。 – Siguza

+0

您可能必須在引用其對象文字之前解析JSON數據。 – Sajal

+0

你可以縮小這個例子嗎? –

回答

2

您試圖訪問可能有時即是不確定的,消極的對象。在嘗試訪問它之前,最好檢查一下否定是否爲空。

if(typeof obj.positive[0] === "undefined"){ 
    if(typeof obj.negative[0] === "undefined"){} 
     else 
    { 
     text = obj.negative[0].normalized_text; 
    } 
}else { 
text = obj.positive[0].normalized_text; 
}