为何无法将JSON.stringify输出的字符串解析为JS字符串?
JSON.parse解析含XML/HTML的字符串报错的原因及解决办法
你遇到的这个报错,核心原因是手动添加双引号和转义的操作破坏了JSON的语法规范,导致JSON解析器无法识别正确的字符串结构。
常见的手动操作失误点:
- 内部双引号未转义:XML/HTML里通常会有属性双引号(比如
<img src="pic.jpg">),你手动给整个字符串套外层双引号后,这些内部双引号没有用\"转义,解析器会误认为字符串在这里就结束了,直接触发语法错误。 - 转义符号错误:比如把转义符写成了
"\"(顺序错了),或者多转义了不需要处理的字符(比如把<转成\<,JSON里并不需要转义这个),导致解析器无法识别有效字符。 - 控制字符未处理:XML/HTML里的换行、制表符等不可见字符,在JSON字符串里必须转成
\n、\t,如果直接保留原始换行,解析器会判定为无效语法。
正确的处理方式:
完全不需要手动干预,让JSON工具自己处理转义和包裹:
- 先把你的XML/HTML字符串用
JSON.stringify()处理,它会自动完成双引号包裹和内部特殊字符转义:
// 原始XML/HTML字符串 const xmlHtmlStr = '<div class="content"><p>test</p></div>'; // 自动转成符合JSON规范的字符串 const validJsonStr = JSON.stringify(xmlHtmlStr);
- 之后需要解析时,直接用
JSON.parse()就能还原原始字符串:
const parsedStr = JSON.parse(validJsonStr); // parsedStr就是最初的XML/HTML内容
如果一定要手动修复已有的错误字符串,逐一检查:
- 确保整个字符串被一对双引号包裹,且没有遗漏
- 内部所有双引号都替换成
\" - 所有反斜杠替换成
\\(如果原始内容里有反斜杠的话) - 把换行、回车替换成
\n、\r
内容的提问来源于stack exchange,提问作者F. Zer
相关产品推荐
相关产品推荐

