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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:09:03