2013-07-24 4 views
2

Вот отрывок из JavaScript с моей C# веб MVC приложения:Как преобразовать объект JSON в массив в 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 response в массив, чтобы он выглядел следующим образом (обратите внимание на добавленные квадратные скобки для массива)

"{ 
    \"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(); 
}); 

Ответ будет иногда включать в себя объект цветопередача как массив, поэтому мне нужно только, чтобы преобразовать в массив в тех случаях, когда его нет.

Может кто-то, пожалуйста, помогите мне с правильным javascript, чтобы преобразовать объект json в массив. Предпочтительно модифицируя мой существующий код

+0

Зачем вам это нужно? –

+0

Итак, у вас есть один объект, и вы возвращаете объект, но хотите сделать его как отдельный элемент в 'Array'? – FSou1

+0

Мне нужно это сделать, потому что Angular ng-repeat на мой взгляд нуждается в массиве – Milligran

ответ

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 (вид ...)

+0

Rink !!! Ты начальник!!! – Milligran

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

добавить тип данных JSON к вашему сообщению АЯКС. пример

$.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"} 
     ); 
+0

проголосовали? хммм –

Смежные вопросы