You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何编写函数在JSON中新增字段?含邮箱提取需求及示例代码

如何从JSON数据的message字段提取邮箱并新增Email字段?

没问题,我来帮你搞定这个需求!你已经有了基础的正则提取思路,我会把这个逻辑封装成完整的可复用函数,还会处理一些边缘情况(比如message里没有邮箱的场景)。

首先看你的原始数据

[
    {"No.":1,"source_link":"www.aa.com","brand":"Gorn","item_name":"Beautiful","category":"Red","message":"My email is abcdefg@gmail.com","create_date":"13\/7\/2017 20:04","date":"13\/7\/2017"},
    {"No.":2,"source_link":"www.bb.com","brand":"Mik","item_name":"Pork","category":"White","message":"My email is zxcvbg@gmail.com","create_date":"13\/7\/2017 20:04","date":"13\/7\/2017"}
]

完整的Python实现代码

结合你给出的正则逻辑,我写了两个核心函数:一个专门提取邮箱,一个处理整个JSON数组并新增字段,同时做了异常防护:

import re
import json

def extract_email(message):
    # 用你提供的正则匹配邮箱,覆盖大部分常见格式
    match = re.search(r'[\w\.-]+@[\w\.-]+', message)
    # 处理没有匹配到邮箱的情况,避免报错
    return match.group(0) if match else None

def add_email_field(json_data):
    # 遍历JSON数组中的每个条目
    for item in json_data:
        # 从message字段提取邮箱(如果message不存在,用空字符串兜底)
        email = extract_email(item.get('message', ''))
        # 新增Email字段
        item['Email'] = email
    return json_data

# ---------------------- 示例用法 ----------------------
# 如果你原始数据是JSON字符串格式(已经是Python列表可跳过此步)
original_json_str = '''
[
    {"No.":1,"source_link":"www.aa.com","brand":"Gorn","item_name":"Beautiful","category":"Red","message":"My email is abcdefg@gmail.com","create_date":"13\/7\/2017 20:04","date":"13\/7\/2017"},
    {"No.":2,"source_link":"www.bb.com","brand":"Mik","item_name":"Pork","category":"White","message":"My email is zxcvbg@gmail.com","create_date":"13\/7\/2017 20:04","date":"13\/7\/2017"}
]
'''

# 解析JSON字符串为Python列表
original_data = json.loads(original_json_str)

# 处理数据,新增Email字段
processed_data = add_email_field(original_data)

# 输出格式化后的结果
print(json.dumps(processed_data, indent=2))

代码关键点解释

  • extract_email函数:专注于邮箱提取,加入了空值判断,防止message里没有邮箱时程序崩溃。
  • add_email_field函数:批量处理整个JSON数组,给每个条目新增Email字段,用item.get('message', '')兜底,避免message字段不存在的情况。
  • JSON转换:如果你的原始数据是JSON字符串,用json.loads转成Python列表;处理完成后可以用json.dumps输出格式化的JSON结果。

处理后的输出效果

运行代码后,你会得到包含Email字段的目标JSON数组:

[
  {
    "No.": 1,
    "source_link": "www.aa.com",
    "brand": "Gorn",
    "item_name": "Beautiful",
    "category": "Red",
    "message": "My email is abcdefg@gmail.com",
    "create_date": "13/7/2017 20:04",
    "date": "13/7/2017",
    "Email": "abcdefg@gmail.com"
  },
  {
    "No.": 2,
    "source_link": "www.bb.com",
    "brand": "Mik",
    "item_name": "Pork",
    "category": "White",
    "message": "My email is zxcvbg@gmail.com",
    "create_date": "13/7/2017 20:04",
    "date": "13/7/2017",
    "Email": "zxcvbg@gmail.com"
  }
]

额外小提示

如果你的原始数据已经是Python列表(不是JSON字符串),直接把列表传给add_email_field函数即可,不需要json.loads步骤。另外,如果你需要更严谨的邮箱正则,可以调整表达式,但你现有的这个已经能覆盖绝大多数日常遇到的邮箱格式了。

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

火山引擎 最新活动