我正在一个社交网站上工作,用户可以在这里互相发送消息。我正在向php文件发送ajax请求以获取用户以json格式接收的消息,如下所示:
{"messages":[ {"mid":"1","name":"Sam","msg":"Hi Anna"}, {"mid":"4","name":"Kelly","msg":"Hi Anna"}, {"mid":"5","name":"Sam","msg":"Hi Anna"}, {"mid":"7","name":"Sam","msg":"Hello Anna"}, {"mid":"8","name":"Kelly","msg":"Anna"} ]}
在上述场景中,用户“Anna”正在接收来自用户“Sam”和“Kelly”的消息。 现在我需要解析这个json结构以分离每个用户的响应,并将它们显示给Anna。
我如何解析这个json数组以获得2个javascript数组,以便我可以循环它们并显示响应?
答案 0 :(得分:3)
假设您已将JSON解码并转换为javascript变量:
var response = {
"messages":[
{"name":"Sam","msg":"Hi Anna"},
{"name":"Kelly","msg":"Hi Anna"},
{"name":"Sam","msg":"Hi Anna"},
{"name":"Sam","msg":"Hello Anna"},
{"name":"Kelly","msg":"Anna"}
]
};
var dataByUser = {}, userName;
var msgs = response.messages;
for (var i = 0; i < msgs.length; i++) {
userName = msgs[i].name;
// if we don't have any msgs for this user, then initialize their data structure
if (!dataByUser[userName]) {
dataByUser[userName] = [];
}
dataByUser[userName].push(msgs[i].msg);
}
这会产生如下所示的数据结构:
var dataByUser = {
"Sam" : ["Hi Anna", "Hi Anna", "Hello Anna"],
"Kelly": ["Hi Anna", "Anna"]
};
然后,您可以随时循环使用:
for (var userName in dataByUser) {
// dataByUser[userName] is the array of messages from userName
}
或者如果你知道你感兴趣的userName,你可以直接索引它:
dataByUser["Sam"] // contains array of messages from Sam
编辑:显然,您编辑了问题并添加了一个消息ID(mid
),当我写这个答案时,它不在数据中。目前还不清楚你想用该消息ID做什么。如果需要,每个用户的数据可以是一个对象数组,而不是一个字符串数组,其中每个对象都包含消息ID和消息。
答案 1 :(得分:1)
将即将编码的json转换为变量,如
var messages = jQuery.parseJSON('StringSourceOfYourJsonEncoded');
jQuery(messages).each(function(index,value) {
// GET THE OBJECT DATA FROM HERE.
alert(messages.msg);
});
希望,这会有效。