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

如何用正则将JSON中含连字符的token/API密钥值替换为空字符串

JSON敏感凭证字段值脱敏方案

需求说明

需要在保留JSON原有结构、字段键名的前提下,清空access_token、Api_key这类敏感凭证字段的取值,不能直接删除整行键值对。
待处理示例JSON:

{
"name":"any name",
"access_token":"xxx-xxxxx-1234-45rf",
"some_data":"some random data",
"Api_key":"1234-cd34-xxx-xxxx"
}

最初尝试的正则".*-.*-.*"匹配范围过宽,会把整行键值对全部删除,不符合要求。
期望处理效果:

{
"name":"any name",
"access_token":"",
"some_data":"some random data",
"Api_key":""
}

补充约束:敏感凭证值长度不固定,普遍包含连字符。


可选实现方案

方案1:结构化解析(优先推荐,无匹配误差)

正则直接处理JSON字符串容易因为格式变体(比如键值对前后有多余空格、值里有转义引号、嵌套结构)出现误判,最稳妥的方式是先把JSON反序列化为对象,定位到敏感字段后清空值,再重新序列化为JSON。
以Python实现为例:

import json

# 配置需要脱敏的敏感字段集合,匹配时可统一转小写兼容大小写变体
sensitive_key_set = {"access_token", "api_key"}
raw_content = '''{
"name":"any name",
"access_token":"xxx-xxxxx-1234-45rf",
"some_data":"some random data",
"Api_key":"1234-cd34-xxx-xxxx"
}'''

# 解析JSON
json_obj = json.loads(raw_content)
# 遍历清空敏感字段值
for key in json_obj:
    if key.lower() in sensitive_key_set:
        json_obj[key] = ""
# 按原有缩进格式输出
result = json.dumps(json_obj, indent=2, ensure_ascii=False)
print(result)

这个方案不受敏感值格式、长度影响,不会破坏JSON结构,适合所有可正常解析JSON的场景。

方案2:正则替换(适合无法解析JSON的轻量场景)

如果场景限制无法做JSON结构化解析,可以用分组捕获的正则,只替换值部分,保留键名和JSON结构:

  • 匹配正则:("(?:access_token|api_key|Api_key)"\s*:\s*)"[^"]*"
  • 替换为:$1""

正则逻辑说明:

  • 第一个捕获组匹配需要完整保留的结构:敏感字段的键名、键名前后的引号、键名和冒号之间的空白、冒号、冒号和值之间的空白
  • 捕获组外的部分匹配需要清空的字段值:双引号包裹的所有取值内容,直接替换为空双引号即可
    如果后续需要新增其他敏感字段,直接在正则的(?:access_token|api_key|Api_key)分组里补充字段名即可。

注意:正则方案无法完美兼容所有特殊JSON格式,比如值内存在转义双引号、字段嵌套在多层对象中时可能出现匹配偏差,这类情况必须用结构化解析方案处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:27:34