Подтвердить что ты не робот

Как перебрать ассоциативный массив JSON в javascript?

Я получаю ответ JSON от сервера, и мне нужно пройти через массив в javascript и получить значения. Но я наклоняю, кажется, зацикливаюсь на нем.

Ответ JSON массива выглядит следующим образом:

{
   "1": "Schools",
   "20": "Profiles",
   "31": "Statistics",
   "44": "Messages",
   "50": "Contacts"
}

Я просто хочу пропустить его, чтобы получить идентификатор и имя и заполнить некоторые значения на странице.

Я пробовал:

$.each(response, function(key, value) {
    alert(key + ' ' + value);
});

// and 

for (var key in response) {
    alert(key + ' ' + response[key]);
}

Но не давайте правильных значений.

Заранее благодарим за помощь.

Ответ: Здравствуй, Ответ, который я получаю со вторым циклом:

0 {
1 "
2 1
3 "
4 :
5 "
6 S

и т.д.

Таким образом, это означает, что он проходит весь ответ в виде строки и разделяет его как ключ/значение.

Спасибо

4b9b3361

Ответ 1

Ваша проблема в том, что вы не анализируете строку JSON. Таким образом, ваш foreach проходит через символы в строке JSON.

// If you are using jQuery.ajax, you can just set dataType to 'json' 
// and the following line will be done for you
var obj  = jQuery.parseJSON( response );
// Now the two will work
$.each(obj, function(key, value) {
    alert(key + ' ' + value);
});


for (var key in obj) {
    alert(key + ' ' + response[key]);
}

Ответ 2

var response = {"1":"Schools","20":"Profiles","31":"Statistics","44":"Messages","50":"Contacts"};

for (var i in response) {
    console.log(i + ' ' + response[i]);
}

Хорошо работает, как вы получаете свой ответ var?

Ответ 3

Вам не нужно так поступать, работа со строкой - это скучная работа. Вы можете сделать объект через ответ. 1: json = eval(xmlHttp.responseText);

но это в некоторой степени небезопасно.

  • json = JSON.parse(xmlHttp.responseText, function(key,value){// can do some other stuff here.});

тогда вы можете использовать переменную как обычный объект, такой как obj.a или obj [ "a" ].

Пусть это поможет вам.

Ответ 4

http://jsfiddle.net/sG5sF/

jQuery.each работает отлично. Итак, for-each loop

http://jsfiddle.net/TfjrS/

Оба они работают так, как должны. У вас могут быть ошибки в других частях вашего кода. Правильно ли задана переменная response для объекта JSON, указанного в вашем вопросе? Проверяете ли вы статус statusCode? для успешного ответа это должно быть 200?

Ответ 6

Вы можете использовать конструкцию for-in в чистом Javascript. Конечно, вам нужно быть осторожным, что вы смотрите только на собственные свойства объекта (такие библиотеки, как Prototype, имеют тенденцию загрязнять):

for(var key in response) {
    if(response.hasOwnProperty(key)) {
       ...
    }
}

ИЗМЕНИТЬ

Используете ли вы jQuery.ajax? Что означает значение dataType? Это должно быть json. Возможно, поэтому ваш ответ интерпретируется как строка. Кроме того, когда вы ответите console.log, он отображается как строка или объект?