2017-06-07 42 views
1

我一直在想如何在Javascript中正確接收OData響應幾天。問題是響應被格式化爲數組而不是JSON,所以函數JSON.parse(mydata)不適用於我收到的數據。OData返回數組而不是JSON - 如何轉換?

我的問題有兩方面:什麼是正確的方式來請求OData發送響應爲JSON和/或如何格式化我當前的響應爲JSON?

在這裏的是,我使用的代碼:

$.ajax({ 
       type: "GET", 
       url: requestUri, 
       dataType: "script", 
       accept: "application/json", 
       success: function(data, request) { 
        var jsonData = JSON.parse(data); 
       }, 
       error: function(msg) { 
        alert(msg); 
       }}) 

這裏是記錄所述可變dataconsole.log的示例響應:

{"@odata.context":"http://localhost:5001/odata/$metadata#Movies","value":[{"Title":"Pulp Fiction","Genre":"Action","RunTime":0,"Sales":0,"Key":2}]}

+0

的可能的複製[轉換JS目的是JSON字符串](https://stackoverflow.com/questions/4162749/convert-js -object-to-json-string) – Brian

+0

@Brian我真的很想知道如果我的OData請求不正確,那個問題與OData無關。 – sczapuchlak

回答

-1

你可以將它添加到一個變量並像這樣訪問它。

var v={"@odata.context":"http://localhost:5001/odata/$metadata#Movies","value":[{"Title":"Pulp Fiction","Genre":"Action","RunTime":0,"Sales":0,"Key":2}]}; 
//v.value[0] is a json object 
console.log(v.value[0]); 

或完全跳過分配和訪問這種方式:

data.value[0] 
data.value[0].Genre 
data.value[0].RunTime 
etc.... 
+0

謝謝,第二個例子正是我正在尋找的。你是一個救星! – sczapuchlak

2

該問題的響應是格式化爲數組而不是JSON

不可能。您不能通過HTTP發送「數組」。你必須以某種方式對它進行編碼......例如作爲JSON。

除非用dataType選項覆蓋它,否則jQuery將使用Content-Type HTTP響應標頭來確定數據的編碼方式。如果它是JSON,它將解析JSON。

data的值是您在閱讀原始文件responseText並通過JSON.parse後得到的結果。

所以只是不要嘗試手動解析它。 jQuery已經爲你做到了。

跳過步驟:

var jsonData = JSON.parse(data); 

...和剛剛與data工作。

注意:JSON.parse的輸出是一個對象,數組或其他JavaScript數據類型。 JSON數據是你從JSON.stringify得到的。

+0

值得一提的是,預期的數據在'data.data' – baao

+0

我不知道改變dataType覆蓋。這非常有幫助,謝謝! – sczapuchlak

+0

@baao你的意思是'data.value'? – sczapuchlak

相關問題