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

如何用正则表达式移除JSON/字典中所有指定属性?

移除JSON中所有指定属性的正则方案

要移除JSON字符串中所有嵌套出现的"$type"属性(包含其对应的值),可以使用以下正则表达式配合string.replace方法:

const regex = /"\$type"\s*:\s*"[^"\\]*(?:\\.[^"\\]*)*"(?:,\s*)?/g;

正则说明

  • "\\$type":精准匹配属性键"$type",$是正则特殊字符,需用反斜杠转义
  • \s*:\s*:匹配冒号,兼容键值对前后可能存在的任意空白字符
  • "[^"\\]*(?:\\.[^"\\]*)*":正确匹配JSON字符串类型的值,包括处理值内部的转义字符(比如\")
  • (?:,\s*)?:可选匹配属性后的逗号及空白,避免删除属性后留下多余逗号导致JSON格式错误

使用示例

// 原始JSON字符串
const originalJson = `{
  "$type": "Sample.Type1",
  "name": "test",
  "child": {
    "$type": "Sample.Type2",
    "value": 456
  },
  "list": [
    {"$type": "Sample.Item", "id": 1},
    {"id": 2}
  ]
}`;

// 移除所有$type属性
const cleanedJson = originalJson.replace(regex, '');

console.log(cleanedJson);

注意事项

  • 该正则仅适用于$type的值为字符串类型的场景(这也是大多数$type属性的常见情况)
  • 如果JSON中存在非字符串类型的$type值(比如数字、布尔),需要调整正则的匹配值部分
  • 正则处理JSON并非绝对可靠,若JSON结构异常复杂(比如存在多层嵌套的转义),建议先将JSON解析为对象,遍历移除属性后再转回字符串,这种方法更稳妥:
    function removeKey(obj, key) {
      if (typeof obj !== 'object' || obj === null) return obj;
      if (Array.isArray(obj)) {
        return obj.map(item => removeKey(item, key));
      }
      const result = {...obj};
      delete result[key];
      Object.keys(result).forEach(k => {
        result[k] = removeKey(result[k], key);
      });
      return result;
    }
    
    // 使用示例
    const parsedObj = JSON.parse(originalJson);
    const cleanedObj = removeKey(parsedObj, '$type');
    const cleanedJson = JSON.stringify(cleanedObj, null, 2);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:40:31