我正在开发一个社交网站,用户可以在该网站上互相发送消息。我正在向 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 数组,以便我可以循环它们并显示响应?
最佳答案
假设您已经将 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
}
或者,如果您知道您感兴趣的用户名,则可以直接对其进行索引:
dataByUser["Sam"] // contains array of messages from Sam
编辑:显然,您编辑了问题并添加了消息 ID (mid
),当我编写此答案时,该消息 ID 不在数据中。目前还不清楚您想用该消息 ID 做什么。如果需要,每个用户的数据可以是一个对象数组,而不是一个字符串数组,其中每个对象将包含消息 ID 和消息。
关于php - 如何过滤json数组中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9686234/