嵌套JSON中替换\n为\n的代码未生效,请求错误定位
为什么JSON对象中的转义
\\n没有被正确替换? 你的代码核心错误是判断条件逻辑颠倒,导致目标值根本没被处理,具体问题和修复方案如下:
错误原因
你写的判断条件if (object[k] === 'en' || object[k] === 'de')是在判断「当前键对应的值是否等于'en'或'de'」,但实际上en和de是你要处理的键名(比如title对象里的en、de字段),而对应的值才是包含转义\\n的字符串(比如"\\nBrauchen Sie\\nHilfe?")。
除此之外,代码还缺少对值类型的判断:如果遇到非字符串值(比如showtitle对应的布尔值true),调用replace方法会直接报错。
修正后的代码
var data = { "d": { "name": "Some text", "style": [ { "title": { "showtitle": true, "en": "Need help?", "de": "\\nBrauchen Sie\\nHilfe?", "font": "Helvetica-Semibold" } }, { "subtitle": { "showtitle": true, "en": "English Text", "de": "\\nGerman\\nText", "font": "Helvetica-Semibold" } } ] } }; // 替换JSON中的'\\n'为'\n' function update(object) { Object.keys(object).forEach(function (k) { var v = object[k]; // 递归处理嵌套对象/数组 if (v && typeof v === 'object') { update(v); } // 只处理键为en/de的字符串值 else if (typeof v === 'string' && (k === 'en' || k === 'de')) { object[k] = v.replace(/\\n/g, '\n'); } }); return object; } data = update(data); console.log('Data: ', data);
修改说明
- 修正判断逻辑:将判断条件改为检查键名
k === 'en' || k === 'de',正确识别需要处理的字段。 - 增加类型校验:添加
typeof v === 'string'判断,避免对非字符串值调用replace方法导致报错。 - 优化递归逻辑:递归调用时无需
return,直接执行update(v)即可完成嵌套结构的遍历。
运行修正后的代码后,de字段中的转义\\n会被正确替换为换行符\n,达到预期效果。
内容的提问来源于stack exchange,提问作者user21955191
相关产品推荐
相关产品推荐

