JSON中如何实现换行?插入转义换行符不生效问题求助
问题原因
- 换行符转义错误:你定义的
nbreak = '\\n'实际存储的是字面量的\和n两个字符,不是可被识别的换行符。你多写了一个反斜杠,相当于把反斜杠本身转义了,最终存入JSON的就是普通文本而非换行标识。你后续尝试的//n写法也完全错误,换行转义标识是反斜杠加n\n,不是正斜杠。 - 手动拼接JSON风险:你当前通过字符串拼接生成JSON,非常容易出现转义冲突、特殊字符逃逸问题,就算换行写对了,后续如果员工姓名、职位里包含引号等特殊字符,也会直接导致整个JSON格式失效。
解决方法
如果你需要JSON字符串存储可被识别的换行,后续在终端、前端渲染时自动换行,按下面的方案改造即可:
- 把换行符变量改为正确写法:
var nbreak = '\n' - 改用JS原生
JSON.stringify()生成JSON,它会自动处理所有特殊字符的转义,避免格式错误,换行符也会被自动转义为JSON规范的\n存储。
改造后的参考代码:
function GetOrgJSON(employeeList,manager,total){ const nbreak = '\n'; const employeeProcessed = []; const result = []; for(let i=0;i<employeeList.length;i++){ const objEmp = employeeList[i]; if(objEmp.Manager == manager && employeeProcessed.indexOf(objEmp.Name) < 0 ){ const empUlStr = GetOrgJSON(employeeList,objEmp.ID,0); const children = empUlStr ? JSON.parse('[' + empUlStr + ']') : []; const tcount = children.length; // 先构建JS对象,不手动拼JSON字符串 const empItem = { name: `${objEmp.Name} ${tcount} ${nbreak} ${objEmp.MainRole} ${nbreak} ${objEmp.Country}`, Email: objEmp.Email, title: objEmp.Designation } if(children.length>0){ empItem.children = children } employeeProcessed.push(objEmp.Name); result.push(empItem) } } // 自动生成合法JSON字符串,slice去掉数组首尾的[]符号符合你原有逻辑 return JSON.stringify(result).slice(1,-1); }
注意事项
如果你需要在HTML页面中渲染这段文本实现换行,仅靠\n无效,HTML的换行标识是<br>,你可以直接把nbreak变量改为<br>,渲染时用innerHTML输出即可,也可以在渲染阶段把字符串中的\n全局替换为<br>再展示。
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

