Как перебрать ассоциативный массив 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
и т.д.
Таким образом, это означает, что он проходит весь ответ в виде строки и разделяет его как ключ/значение.
Спасибо
Ответы
Ответ 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?
Ответ 5
Посмотрите на Как я могу разобрать объект JavaScript с jQuery для возможного ответа.
Ответ 6
Вы можете использовать конструкцию for-in
в чистом Javascript. Конечно, вам нужно быть осторожным, что вы смотрите только на собственные свойства объекта (такие библиотеки, как Prototype, имеют тенденцию загрязнять):
for(var key in response) {
if(response.hasOwnProperty(key)) {
...
}
}
ИЗМЕНИТЬ
Используете ли вы jQuery.ajax
? Что означает значение dataType
? Это должно быть json
. Возможно, поэтому ваш ответ интерпретируется как строка. Кроме того, когда вы ответите console.log
, он отображается как строка или объект?