AngularJS中JSON.parse单引号报错,如何保留单引号显示公司名?
解决JSON解析报错+保留含单引号的公司名问题
首先,咱们得搞清楚报错的根源:你提供的JSON里出现了不合法的转义序列\'。JSON规范明确规定,只有特定字符需要转义(比如双引号"、反斜杠\本身),而单引号'在双引号包裹的字符串里是完全合法的,不需要额外加反斜杠转义。正是这个多余的\导致JSON.parse()抛出了语法错误。
下面给你分步解决的方案:
1. 从根源修复:生成合法的JSON
这是最稳妥的做法,确保你生成JSON的时候用标准的序列化工具,而不是手动拼接字符串:
- 如果你用JavaScript生成JSON,直接用
JSON.stringify():const contacts = [ { id: "1", company: "Cutting", contact: "Russell Chimera" }, { id: "2", company: "Gge's", contact: "Marci" } ]; const validJson = JSON.stringify(contacts); // 生成的合法JSON:{"contacts":[{"id":"1","company":"Cutting","contact":"Russell Chimera"},{"id":"2","company":"Gge's","contact":"Marci"}]} - 后端语言(比如Python、Java)也都有内置的JSON序列化函数,用它们生成的JSON会自动处理所有合法转义,不会给单引号加多余的反斜杠。
用这种方式生成的JSON,JSON.parse()可以直接解析,不会报错。
2. 应急方案:预处理非法JSON(如果无法修改生成环节)
如果数据是外部来源,你没法改生成逻辑,可以先修复JSON字符串再解析:
// 你拿到的非法JSON const invalidJson = `{"contacts":[{"id":"1","company":"Cutting","contact":"Russell Chimera"},{"id":"2","company":"Gge\'s","contact":"Marci"}]}`; // 替换掉非法的\'为' const fixedJson = invalidJson.replace(/\\'/g, "'"); // 现在可以正常解析了 const data = JSON.parse(fixedJson);
⚠️ 注意:这种方法只适合确定只有\'这种非法转义的场景,避免破坏其他合法的转义序列(比如\"、\\)。
3. 渲染环节的正确做法
当你拿到解析后的合法数据后,直接用{{x.company}}渲染就可以正常显示Gge's了,不需要加escape过滤器:
- 模板引擎(比如Handlebars、Vue模板)默认的插值语法已经会处理HTML特殊字符(比如
<、>),但单引号不属于需要转义的HTML特殊字符,所以直接渲染就能正确显示。 - 如果你是把内容放在单引号包裹的HTML属性里(比如
<div data-company='{{x.company}}'>),模板引擎通常会自动转义属性里的单引号,不用担心XSS问题。
总结一下:先搞定JSON的合法性问题,渲染就水到渠成了,完全不需要移除单引号~
内容的提问来源于stack exchange,提问作者Deepak3301086
相关产品推荐
相关产品推荐

