1

Javascriptに送信されたPHPによって動的に生成された配列があります。これは基本的に未読メッセージの配列です。送信者の名前と送信したメッセージが含まれています。

名前がわからないので、名前とメッセージを取得するにはどうすればよいですか?

{"Emma Giles":
[{"message":"Hi Phil","date":"Tue 10 May 2:55 PM 2011"}],
"Johnathan Macmanners":
[{"message":"Hi Emma","date":"Sun 26 June 10:03 PM 2011"}],
"Ellen Murley":
[{"message":"Hello","date":"Fri 04 May 4:05 PM 2012"},
{"message":"How are you?","date":"Fri 04 May 2:52 PM 2012"}],
"Amanda Patterson":
[{"message":"test","date":"Fri 27 April 10:07 AM 2012"}],
"ALEX Pell":
[{"message":"Hi Alvon","date":"Mon 05 March 10:07 AM 2012"}]}

私はこれを試しましたが、何らかの理由で数字のみを出力し、キーを val に置き換えて、配列内のすべての文字を 1 つずつ出力します。:

$.each(data, function(key, val)
{
    console.log(key);
});
4

4 に答える 4

1

親コンテナは配列ではなくオブジェクトです。次に、ネストされたオブジェクトの配列があります。

for (var key in data) {
    // key is the name of the person,
    // data[key] is the array containing the message data

    for (var i = 0, l = data[key].length; i < l; i++) {
      for (var msgKey in data[key][i]) {
         // msgKey will be "message" or "date"
         // data[key][i][msgKey] is the value of each key
      }  
    }
}
于 2012-05-09T17:25:54.807 に答える
1

JSON を少しクリーンアップすると、メッセージ オブジェクトの配列を指すユーザー名で構成されるハッシュが得られます。

var data = {
  "Emma Giles": [
    {"message":"Hi Phil","date":"Tue 10 May 2:55 PM 2011"}
  ],
  "Johnathan Macmanners": [
    {"message":"Hi Emma","date":"Sun 26 June 10:03 PM 2011"}
  ]
};

あなたが望むものを手に入れるという点で、あなたはほとんどそこにいます:

$.each(data, function(name, messages) {
   var messageText = messages[0].message;

   alert(name + ': ' + messageText);
});

参考までに、ここにフィドルがあります

于 2012-05-09T17:28:52.243 に答える
0

データはまだシリアル化されており、文字列として認識されているようです。

次のような方法でデータをフェッチしてみてください。

$.getJSON(url, function (data) {
    $(data).each(function (key, value) {
        // ...
    });
});

...または古き良きを使用しeval()ますが、できれば避けたいと思います。

于 2012-05-09T17:28:48.793 に答える
0

これも機能します:

var a = {"Emma Giles":
[{"message":"Hi Phil","date":"Tue 10 May 2:55 PM 2011"}],
"Johnathan Macmanners":
[{"message":"Hi Emma","date":"Sun 26 June 10:03 PM 2011"}],
"Ellen Murley":
[{"message":"Hello","date":"Fri 04 May 4:05 PM 2012"},
{"message":"How are you?","date":"Fri 04 May 2:52 PM 2012"}],
"Amanda Patterson":
[{"message":"test","date":"Fri 27 April 10:07 AM 2012"}],
"ALEX Pell":
[{"message":"Hi Alvon","date":"Mon 05 March 10:07 AM 2012"}]};

var keys = Object.keys(a);
for(var i = 0, max = keys.length; i < max; i++){
    var key = keys[i]; //name
    var val = a[key]; //messages array
    console.log(key);
    for(var j = 0, jmax = val.length; j < jmax; j++){
        var message = val[j].message;
        console.log("      "+message);
    }

}
于 2012-05-09T17:34:14.133 に答える