Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обработка массива в json (https://javascript.ru/forum/misc/26097-obrabotka-massiva-v-json.html)

delargo 25.02.2012 18:31

Обработка массива в json
 
Есть ответ от сервера (переменная r ниже):
VK.Api._callbacks[3704529]({"response":[{"account_id":160_еще_цифры,"account_status":1,"access_role":"admin"}]});


Есть функция, которая обрабатывает ответ от сервера:

function doAfterGetAccounts(r){
  if(r.error) alert("Ошибка получения списка аккаунтов");
  if(r.response){
    var s = "";
    s += "lenght: " + r.response.lenght + "\n";
    var accounts = new Array();
    for(var i = 0; i < r.response.lenght; i++){ 
      s += i + " loop\n";
      accounts[i] = new Account(r.response[i].account_id, r.response[i].account_status, r.response[i].access_role);
    }
  alert(s);
  }
}


Искал в интернете, ни где нормального разъяснения не нашел.

Вопрос: почему на строчку r.response.lenght выдается ответ undefined, и, следовательно, цикл ни разу не обрабатывает массив? Как с этим бороться, чтобы получить массив элементов (в моем случае массив, содержащие один элемент, но может быть и большее количество элементов, количество которых заранее не известно)?

Мои комментарии: Я так понимаю, что новая версия JavaScript сама распарсивает JSON. Поэтому, если обращаться через r.response[0].account_id программы выдает адекватный ответ. А вот как работать с любым количеством элементов - я пока не знаю. Разве что можно попробовать конструкцию try/catch, но она не лучший выход.

Заранее благодарен.

nikita.mmf 25.02.2012 20:47

Могу только предположить, что r.response - это не массив, а объект. Тогда можно поступить следующим образом
for( var i = 0, account; (account = r.response[i]); i++ ) {
    accounts[i] = new Account( account.account_id, account.account.status, account.access_role );
}

delargo 26.02.2012 14:40

Спасибо за избавление от мучений непонимания.


Часовой пояс GMT +3, время: 00:15.