如何用正则表达式移除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
相关产品推荐
相关产品推荐

