You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中合并同FROM字段的JSON数组MESSAGE元素的实现方法

合并相同FROM字段的邮件MESSAGE数组问题

需求描述

你有一组嵌套的邮件JSON数据,当多个邮件项的FROM字段值相同时,需要将它们的MESSAGE数组合并,其他字段可以保留第一个匹配项的值(比如SUBJECT、DATE等,你提到可以暂不处理DATE)。

原始输入:

[
  [
    {
      "TO": "nathanoluwaseyi@gmail.com",
      "FROM": "johndoe@gmail.com",
      "SUBJECT": "This is the subject 1",
      "MESSAGE": ["First Message"],
      "NAME": "John Doe",
      "DATE": "2019-08-18 19:48:10"
    },
    {
      "TO": "nathanoluwaseyi@gmail.com",
      "FROM": "johndoe@gmail.com",
      "SUBJECT": "This is the subject 2",
      "MESSAGE": ["Second message"],
      "NAME": "John Doe",
      "DATE": "2019-08-18 19:48:10"
    }
  ]
]

期望输出:

[
  [
    {
      "TO": "nathanoluwaseyi@gmail.com",
      "FROM": "johndoe@gmail.com",
      "SUBJECT": "This is the subject 1",
      "MESSAGE": ["First Message", "Second Message"],
      "NAME": "John Doe",
      "DATE": "2019-08-18 19:48:10"
    }
  ]
]

实现方案(以JavaScript为例)

核心思路是按FROM字段分组,遍历过程中合并MESSAGE数组,最后再重组为目标格式。具体代码如下:

// 原始输入数据
const originalData = [
  [
    {
      "TO": "nathanoluwaseyi@gmail.com",
      "FROM": "johndoe@gmail.com",
      "SUBJECT": "This is the subject 1",
      "MESSAGE": ["First Message"],
      "NAME": "John Doe",
      "DATE": "2019-08-18 19:48:10"
    },
    {
      "TO": "nathanoluwaseyi@gmail.com",
      "FROM": "johndoe@gmail.com",
      "SUBJECT": "This is the subject 2",
      "MESSAGE": ["Second message"],
      "NAME": "John Doe",
      "DATE": "2019-08-18 19:48:10"
    }
  ]
];

// 第一步:取出内层的邮件数组(因为原始数据是嵌套数组)
const emails = originalData[0];

// 第二步:创建一个临时对象来分组,键为FROM的值
const groupedEmails = {};

// 第三步:遍历所有邮件项
emails.forEach(email => {
  const fromKey = email.FROM;
  if (groupedEmails[fromKey]) {
    // 如果该FROM已存在,合并MESSAGE数组
    groupedEmails[fromKey].MESSAGE = [...groupedEmails[fromKey].MESSAGE, ...email.MESSAGE];
  } else {
    // 如果不存在,复制当前邮件项到分组中(用展开运算符做浅拷贝,避免引用问题)
    groupedEmails[fromKey] = {...email};
  }
});

// 第四步:将分组对象的值转为数组,再包装成原始的嵌套格式
const result = [Object.values(groupedEmails)];

console.log(JSON.stringify(result, null, 2));

补充说明

  • 这里用浅拷贝{...email}来复制邮件项,避免后续修改影响原始数据;如果你的邮件项有更深层次的嵌套对象,需要用深拷贝(比如JSON.parse(JSON.stringify(email)))。
  • 其他字段(比如SUBJECT)会保留第一个匹配项的值,如果你需要处理这些字段(比如合并或取最新),可以在遍历的时候额外添加逻辑。
  • 如果使用其他编程语言(比如Python),思路是完全一致的:用字典按FROM分组,遍历合并数组,最后转换为目标格式。

内容的提问来源于stack exchange,提问作者Eniayomi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 07:19:08