OData返回数组而不是JSON - 如何转换?

时间:2017-06-07 20:03:16

标签: javascript json odata

我一直试图想出如何在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);
                }})

以下是使用data记录变量console.log的示例响应:

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

3 个答案:

答案 0 :(得分: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获得的数据。

答案 1 :(得分:0)

如果响应是OData格式,如您的示例所示,但您希望它以JSON格式可以由 JSON.parse 解析,请添加 $ format = json OData查询,只要OData端点支持它。我知道Dynamics 365没有。

答案 2 :(得分:-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....