Javascript OData返回数组而不是JSON-如何转换?
几天来,我一直在想如何正确地接收Javascript中的OData响应。问题是响应的格式是数组而不是JSON,因此函数Javascript OData返回数组而不是JSON-如何转换?,javascript,json,odata,Javascript,Json,Odata,几天来,我一直在想如何正确地接收Javascript中的OData响应。问题是响应的格式是数组而不是JSON,因此函数JSON.parse(mydata)无法处理我接收的数据 我的问题有两个方面:请求OData以JSON形式发送响应的正确方式是什么,和/或如何将当前响应格式化为JSON 以下是我正在使用的代码: $.ajax({ type: "GET", url: requestUri, dataTy
JSON.parse(mydata)
无法处理我接收的数据
我的问题有两个方面:请求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);
}})
下面是使用控制台记录变量数据的响应示例。log
:
{“@odata.context”:http://localhost:5001/odata/$metadata#Movies“,”value“:[{“Title:”低俗小说“,”体裁“:”动作“,”运行时“:0,“Sales”:0,“Key”:2}]}
问题是响应的格式是数组而不是JSON
不可能。您不能通过HTTP发送“数组”。您必须以某种方式对其进行编码…例如,将其编码为JSON
除非使用dataType
选项覆盖jQuery,否则jQuery将使用Content-Type
HTTP响应头来确定数据的编码方式。如果是JSON,它将解析JSON
如果读取原始的responseText
并将其通过JSON.parse
传递,就会得到data
的值
所以不要试图手动解析它。jQuery已经为您完成了这项工作
跳过以下步骤:
…只需处理数据
注意:JSON.parse
的输出是一个对象、数组或其他JavaScript数据类型。JSON数据是从JSON中获得的。stringify
您可以将其添加到变量中,然后像那样访问它
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....
如果响应是OData格式的,如您的示例所示,但您希望它是JSON格式的,并且可以通过JSON.parse进行解析,那么在OData查询中添加$format=JSON,只要OData端点支持它。我知道Dynamics 365没有。谢谢,第二个例子正是我想要的。你是救命恩人!值得一提的是,预期的数据存在于
数据中。data
我不知道更改数据类型会覆盖。这帮了大忙,谢谢@baao你是说data.value
?可能重复@Brian我真的很想知道我的OData请求是否不正确,这个问题与OData无关。
data.value[0]
data.value[0].Genre
data.value[0].RunTime
etc....