You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JSON字符串双引号转义方法及解析报错问题排查

如何在JSON字符串中转义双引号?

咱们先把核心规则理清楚,避免再踩坑:

  • 在JSON本身的语法里,字符串内部的双引号必须用\来转义,也就是写成\",这样JSON解析器才会把它当成字符串的一部分,而不是结束标记。
  • 但当你在JavaScript代码里写JSON字符串的时候,因为JavaScript本身会解析反斜杠(它是JS的转义字符),所以你得对反斜杠再转一次——用\\来表示JSON里的单个\

先说说你遇到的两个错误问题出在哪

  1. 第一个尝试里的"是HTML实体,JSON根本不认识这种写法!你得把它换成实际的双引号"才行,HTML实体是给浏览器解析用的,和JSON完全不搭边。
  2. 第二个尝试JSON.parse({"x":"Hello " test "})的问题在于:JavaScript模板字符串会先把\"解析成一个普通的双引号,结果传给JSON.parse的内容变成了{"x":"Hello " test "}——这明显语法炸了,中间的双引号直接打断了字符串,JSON解析器当然报错。

正确的写法看这里

  • 用JS模板字符串的正确姿势
    要让JSON解析器拿到\",你得在模板字符串里写\\"(两个反斜杠+双引号),这样JS会把\\解析成单个\,最终传给JSON的就是正确的\"

    JSON.parse(`{"x":"Hello \\" test"}`)
    
  • 用单引号包裹JSON字符串更省心
    单引号字符串里的双引号不需要被JS转义,你只需要保证JSON本身的转义正确就行(也就是用\\表示JSON里的\):

    JSON.parse('{"x":"Hello \\" test"}')
    
  • 如果是处理带HTML实体的字符串
    比如你提到的Hello " test,得先把"替换成",再转义成JSON能识别的格式:

    const originalStr = 'Hello " test';
    // 先替换HTML实体,再转义双引号
    const escapedStr = originalStr.replace(/"/g, '\\"');
    const jsonStr = `{"x":"${escapedStr}"}`;
    const result = JSON.parse(jsonStr);
    console.log(result.x); // 输出: Hello " test
    

最后再划个重点

别把HTML实体和JSON转义搞混,JSON只认\"这种转义方式;另外在JS里写JSON字符串时,记得给反斜杠多转一次,不然JS会偷偷吃掉一个反斜杠,导致JSON解析失败。

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

火山引擎 最新活动