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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:41:53