web-dev-qa-db-ja.com

javascriptでJSON連想配列をループする方法は?

サーバーからJSON応答を受け取っているので、JavaScriptの配列をループして、値を取得する必要があります。しかし、私はそれをループすることができないようです。

配列のJSON応答は次のようになります。

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

IDと名前を取得し、ページにいくつかの値を入力するために、それをループしたいだけです。

私が試してみました:

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

// and 

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

しかし、どちらも正しい値を与えません。

助けてくれてありがとう。

返信:こんにちは、2番目のループで得られる応答は次のとおりです。

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

などなど

つまり、応答全体を文字列として処理し、キー/値として分割することを意味します。

ありがとう

12
ssin

問題は、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]);
}
19
Juan Mendes
var response = {"1":"Schools","20":"Profiles","31":"Statistics","44":"Messages","50":"Contacts"};

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

正常に動作しますが、応答変数をどのように取得していますか?

2

あなたはそのようにする必要はありません、文字列を扱うことは退屈な仕事です。応答を通じてオブジェクトを作成できます。 1:json = eval(xmlHttp.responseText);

しかし、これはある程度安全ではありません。

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

次に、このobj.aまたはobj ["a"]のような通常のオブジェクトとして変数を操作できます。

これがお役に立てますように。

2
trinity

http://jsfiddle.net/sG5sF/

jQuery.eachは正常に動作します。 for-eachループもそうです

http://jsfiddle.net/TfjrS/

どちらも正常に機能します。コードの他の部分でエラーが発生している可能性があります。 response変数は質問で指定されたJSONオブジェクトに正しく設定されていますか?応答statusCodeを確認していますか?応答を成功させるには200にする必要がありますか?

1
Aravindan R

純粋なJavascriptでfor-inコンストラクトを使用できます。もちろん、オブジェクト自体のプロパティのみを表示していることに注意する必要があります(Prototypeなどのライブラリは汚染する傾向があります)。

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

[〜#〜]編集[〜#〜]

jQuery.ajaxを使用していますか? dataTypeの値は何ですか? jsonである必要があります。これが、応答が文字列として解釈されている理由である可能性があります。また、console.log応答すると、文字列またはオブジェクトとして表示されますか?

0
Vivin Paliath

考えられる答えについては、 jQueryを使用してJavaScriptオブジェクトを解析するにはどうすればよいですか を検討してください。

0
Shamoon