AWS Python Lambda脚本实现JSON键名特殊字符移除与格式化
实现代码
核心逻辑说明
写一个递归处理函数,遍历JSON的所有层级结构:
- 遇到字典类型时,逐个清洗键名,值保持原内容不变,若值为嵌套字典/列表则递归处理
- 遇到列表类型时,遍历每个元素,对元素内的嵌套结构递归处理
- 非字典/列表类型直接返回,不做任何修改
直接使用你指定的[^a-zA-Z0-9]规则匹配非合规字符,替换为空即可。
完整Lambda示例代码
import json import re def clean_dict_keys(obj): # 处理字典类型 if isinstance(obj, dict): cleaned_dict = {} for key, value in obj.items(): # 仅清洗键名,值保持不变 cleaned_key = re.sub(r'[^a-zA-Z0-9]', '', key) # 递归处理值的嵌套结构 cleaned_dict[cleaned_key] = clean_dict_keys(value) return cleaned_dict # 处理列表类型 elif isinstance(obj, list): return [clean_dict_keys(item) for item in obj] # 其他类型直接返回 else: return obj def lambda_handler(event, context): # 原逻辑:读取输入JSON payload input_payload = json.loads(event['body']) if isinstance(event['body'], str) else event['body'] # 新增:键名清洗逻辑 cleaned_payload = clean_dict_keys(input_payload) # 原逻辑:输出为每条单独换行的JSON格式 output = '\n'.join([json.dumps(item) for item in cleaned_payload]) if isinstance(cleaned_payload, list) else json.dumps(cleaned_payload) return { 'statusCode': 200, 'body': output }
效果验证
样例输入
{ "user$id": 123, "personal/info": { "first@name": "Alice", "last#name": "Smith" }, "order/list": [ {"order$id": 456, "amount": "$100"}, {"order$id": 789, "amount": "$200"} ] }
处理后输出
{ "userid": 123, "personalinfo": { "firstname": "Alice", "lastname": "Smith" }, "orderlist": [ {"orderid": 456, "amount": "$100"}, {"orderid": 789, "amount": "$200"} ] }
可以看到所有键名的特殊符号都被移除,值里的$、特殊字符完全保留。
注意事项
如果清洗后出现重复键名,后出现的键值会覆盖先出现的,若需要避免覆盖可以在clean_dict_keys函数中增加重名判断逻辑,给重复键添加序号后缀即可。
内容的提问来源于stack exchange,提问作者Bokambo
相关产品推荐
相关产品推荐

