2015-04-07 2 views
0

У меня есть этот массив, возвращаемый AJAX:Ajax преобразования ответ

console.log(res); 
["07Apr|1", "06Apr|3", "05Apr|12", "04Apr|11", "03Apr|0", "02Apr|0", "01Apr|6", "31Mar|0", "30Mar|7", "29Mar|16", "28Mar|5", "27Mar|5", "26Mar|12", "25Mar|9", "24Mar|4", "23Mar|10", "22Mar|16", "21Mar|2", "20Mar|19", "19Mar|22", "18Mar|10", "17Mar|11", "16Mar|10", "15Mar|19", "14Mar|0", "13Mar|4", "12Mar|14", "11Mar|5", "10Mar|26", "09Mar|7", "08Mar|5"] 

Я преобразовать этот массив с помощью JSON.stringify:

(переменная «Рес» является ответом моего Аякса -as было показано выше)

  var obj = []; 
      var daysBack = 30; 
      var objItem = {}; 
      for(var x = 0; x <= daysBack; x++){ 
       var currObj = res[x]; 
       var objCombo = currObj.split("|"); 
       var objItem = "{date: '"+objCombo[0]+"', downloads: '"+objCombo[1]+"'}"; 
       objItem = JSON.stringify(eval("(" + objItem + ")")); 
       obj.push(objItem); 
      } 

Когда я сбросить "OBJ" в консоли я получаю:

console.log(obj); 
["{"date":"07Apr","downloads":"1"}", "{"date":"06Apr","downloads":"3"}", "{"date":"05Apr","downloads":"12"}", "{"date":"04Apr","downloads":"11"}", "{"date":"03Apr","downloads":"0"}", "{"date":"02Apr","downloads":"0"}", "{"date":"01Apr","downloads":"6"}", "{"date":"31Mar","downloads":"0"}", "{"date":"30Mar","downloads":"7"}", "{"date":"29Mar","downloads":"16"}", "{"date":"28Mar","downloads":"5"}", "{"date":"27Mar","downloads":"5"}", "{"date":"26Mar","downloads":"12"}", "{"date":"25Mar","downloads":"9"}", "{"date":"24Mar","downloads":"4"}", "{"date":"23Mar","downloads":"10"}", "{"date":"22Mar","downloads":"16"}", "{"date":"21Mar","downloads":"2"}", "{"date":"20Mar","downloads":"19"}", "{"date":"19Mar","downloads":"22"}", "{"date":"18Mar","downloads":"10"}", "{"date":"17Mar","downloads":"11"}", "{"date":"16Mar","downloads":"10"}", "{"date":"15Mar","downloads":"19"}", "{"date":"14Mar","downloads":"0"}", "{"date":"13Mar","downloads":"4"}", "{"date":"12Mar","downloads":"14"}", "{"date":"11Mar","downloads":"5"}", "{"date":"10Mar","downloads":"26"}", "{"date":"09Mar","downloads":"7"}", "{"date":"08Mar","downloads":"5"}"] 

Теперь я хочу, чтобы изменить данный формат массив из этого:

["{"date":"07Apr","downloads":"1"}", "{"date":"06Apr","downloads":"3"}", "{"date":"05Apr","downloads":"12"}", "{"date":"04Apr","downloads":"11"}", ....] 

к тому, что один:

[{"date":"07Apr","downloads":"1"}, {"date":"06Apr","downloads":"3"}, {"date":"05Apr","downloads":"12"}, {"date":"04Apr","downloads":"11"}, ....] 

Я имею в виду, чтобы исключить двойные кавычки, которые ограждают объекты в фигурных скобках.

Любые идеи будут оценены ...

+1

Только не stringify, нет? – itamar

+0

как об этом: '.replace ('" {"', '{"'); 'и' replace ('"}"', '"}');' – renakre

+1

@erkaner Не пытайтесь настраивать JSON-парсинг - вы представите больше проблем, чем решите. –

ответ

1

Вы можете проанализировать данные, полученные от ответа ajax, для создания массива.

var populateArray = function (ajaxResponse) { 
    var newArray = []; 
    ajaxResponse.forEach(function (item, index) { 
     var props = item.split('|'); 
     var obj = { 
      date: props[0], 
      downloads: props[1] 
     }; 
     newArray.push(obj) 
    }); 

    return newArray; 
} 

Чтобы продемонстрировать, попробуйте

console.log(populateArray(["07Apr|1", "06Apr|3", "05Apr|12", "04Apr|11", "03Apr|0", "02Apr|0", "01Apr|6", "31Mar|0", "30Mar|7", "29Mar|16", "28Mar|5", "27Mar|5", "26Mar|12", "25Mar|9", "24Mar|4", "23Mar|10", "22Mar|16", "21Mar|2", "20Mar|19", "19Mar|22", "18Mar|10", "17Mar|11", "16Mar|10", "15Mar|19", "14Mar|0", "13Mar|4", "12Mar|14", "11Mar|5", "10Mar|26", "09Mar|7", "08Mar|5"])); 
+0

Благодарим за то, что вы указали совершенно новый подход, чем мой! Который, кстати, работал как шарм! Результат был именно тем, что мне нужно! –

+0

Рад, что это помогло! –

2

Stringify вся структура, когда она будет готова, а не сегменты.

Не используйте eval ever, вместо этого используйте JSON.parse().

 var obj = []; 
     var daysBack = 30; 
     var objItem = {}; 
     for(var x = 0; x <= daysBack; x++){ 
      var currObj = res[x]; 
      var objCombo = currObj.split("|"); 
      var objItem = {date: objCombo[0], downloads: objCombo[1]}; 
      //objItem = JSON.stringify(eval("(" + objItem + ")")); 
      obj.push(objItem); 
     } 
     obj = JSON.stringify(obj); 
+0

Я согласен, гораздо лучше выровнять весь массив, а не его сегменты ... Однако у меня все еще есть фигурные скобки, заключенные в двойные кавычки, что на самом деле то, что я пытаюсь устранить! Прежде чем моя консоль покажет ["{" date ":" 07Apr "," downloads ":" 1 "}", "{" date ":" 06Apr "," downloads ":" 3 "}", "{" date ":" 05Apr "," downloads ":" 12 "}", ...] теперь это: ["{date: '07Apr', downloads: '1'}", "{date: '06Apr', downloads : '3'} "," {date: '05Apr', downloads: '12'} ", ...] –