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

嵌套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);

修改说明

  1. 修正判断逻辑:将判断条件改为检查键名k === 'en' || k === 'de',正确识别需要处理的字段。
  2. 增加类型校验:添加typeof v === 'string'判断,避免对非字符串值调用replace方法导致报错。
  3. 优化递归逻辑:递归调用时无需return,直接执行update(v)即可完成嵌套结构的遍历。

运行修正后的代码后,de字段中的转义\\n会被正确替换为换行符\n,达到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:35:01