如何在javascript中将json对象转换为数组

时间:2013-07-24 18:14:07

标签: javascript

以下是我的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对象转换为数组。最好修改我现有的代码

3 个答案:

答案 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];
}

Fiddle demo.

答案 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"}
       );