如何编写函数在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




