以下是我的C#web MVC应用程序中的一段javascript:
$.ajax({
url: 'myurl'
}).done(function(response) {
$scope.Vdata = JSON.parse(response);
return $scope.$apply();
});
此调用的JSON响应如下所示
"{
\"renditions\": {
\"live\": \"true\",
\" type\": \"default\",
\"rendition\": {
\"name\": \"Live \",
\"url\": \"http: //mysite\"
}
}
}"
我想将json响应rendition对象包装成一个数组,看起来像这样 - (注意数组中添加的方括号)
"{
\"renditions\": {
\"live\": \"true\",
\" type\": \"default\",
\"rendition\": [{
\"name\": \"Live \",
\"url\": \"http: //mysite\"
}]
}
}"
我尝试了类似这样的功能:
$.ajax({
url: 'myurl'
}).done(function(response) {
var tmp;
if (!respose.renditons.rendition.isArray) {
tmp = respose.renditions.renditon;
respose.renditon = [];
respose.renditon.push(tmp);
}
$scope.Vdata = JSON.parse(response);
return $scope.$apply();
});
响应有时会将rendition对象作为一个数组包含在内,所以我只需要将其转换为数组,而不是。
有人可以帮助我使用正确的javascript将json对象转换为数组。最好修改我现有的代码
答案 0 :(得分:0)
您可以使用this检查对象是否为数组:
Object.prototype.toString.call( response.renditions.rendition ) === '[object Array]'
您可以简化到数组的转换 - 只需使用x = [x]
将其包装为数组:
if (Object.prototype.toString.call( response.renditions.rendition ) !== '[object Array]') {
response.renditions.rendition = [response.renditions.rendition];
}
答案 1 :(得分:0)
试试这个:
$.ajax({
url: 'myurl'
}).done(function(response) {
var json = JSON.parse(response);
if(!Array.isArray(json.renditions.rendition)) {
json.renditions.rendition = [json.renditions.rendition];
}
return json;
});
Fiddle demo(有点......)
答案 2 :(得分:-1)
将数据类型JSON添加到您的ajax帖子。示例
$.ajax({type: "POST",
url: URL,
data: PARAMS,
success: function(data){
//json is changed to array because of datatype JSON
alert(data.renditions);
},
beforeSend: function (XMLHttpRequest) {
/* do something or leave empty */
},
complete: function (XMLHttpRequest, textStatus) { /*do something or leave empty */ },
dataType: "json"}
);