php - 如何过滤json数组中的元素?

标签 php javascript json

我正在开发一个社交网站,用户可以在该网站上互相发送消息。我正在向 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/

相关文章:

php - 在同一页面上激活实现 css 表单?

javascript - 如何创建一个 javascript 数组以将数据发送到此 json 格式?

python - 如何将 JSON 对象从 Perl 发送到 Python?

ruby - 将 json 解析为 ruby​​ 对象

php - 关于使用PHP在网站上进行成员(member)登录;想什么?

php - 上传文件 - 500 内部服务器错误

php - 在 Laravel 中查询集合

javascript - JavaScript 中的对象返回自身

javascript - 删除列表项时 Magnific Popup 关闭

javascript - ready() 是否异步执行?