Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript OData返回数组而不是JSON-如何转换?_Javascript_Json_Odata - Fatal编程技术网

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

几天来,我一直在想如何正确地接收Javascript中的OData响应。问题是响应的格式是数组而不是JSON,因此函数
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....