如何修改JS函数实现JSON中指定字符串的替换?
解决JSON对象中所有title字段的字符串替换问题
修改后的函数实现
function replaceValueOfJson(obj) { for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { const value = obj[key]; // 递归处理嵌套对象 if (typeof value === 'object' && value !== null) { replaceValueOfJson(value); } // 遍历数组元素并递归处理 else if (Array.isArray(value)) { value.forEach(item => replaceValueOfJson(item)); } // 匹配title字段,执行字符串替换 else if (key === 'title' && typeof value === 'string') { obj[key] = value.replace(/11111/g, '<').replace(/22222/g, '>'); } } } return obj; }
核心逻辑说明
- 递归遍历JSON的所有层级结构,包括嵌套对象和数组,确保所有
title字段都被处理 - 仅针对
title字段的字符串值执行全局替换:- 把所有
11111替换为< - 把所有
22222替换为>
- 把所有
- 保留原JSON的结构与非目标字段的内容不变
使用示例
输入JSON
const input = { "title": "11111测试22222文本", "menu": [ { "title": "菜单11111项22222", "id": 1 }, { "subMenu": { "title": "子菜单11111标题22222", "url": "/" } } ] };
执行后输出
{ "title": "<测试>文本", "menu": [ { "title": "菜单<项>", "id": 1 }, { "subMenu": { "title": "子菜单<标题>", "url": "/" } } ] }
原函数常见问题排查
原函数无法达成目标通常是以下原因:
- 未递归处理嵌套的对象或数组,仅修改了第一层的
title字段 - 替换时未使用全局匹配(未加
g修饰符),仅替换了第一个匹配的字符串 - 未判断字段值的类型,导致非字符串类型的
title字段出现错误
内容的提问来源于stack exchange,提问作者SHDT
相关产品推荐
相关产品推荐

