使用JSON.parse()解析responseText时出现Unexpected end of JSON input错误
解决JSON.parse()触发Uncaught SyntaxError的问题
这个问题的核心是你拿到的responseText格式不符合标准JSON规范——它被额外的一对双引号包裹住了,而且内部的双引号没有转义,导致JSON.parse()无法正确解析。
问题分析
你提供的responseText是:
"{"session_id": "AAAAAAABvgm8szOYtCcbQg"}"
从表面看,这像是一个字符串包裹着JSON对象,但按照JSON规则,字符串内部的双引号必须用反斜杠转义(比如"{\"session_id\": \"AAAAAAABvgm8szOYtCcbQg\"}"),否则JSON.parse()读到第一个内部双引号时,会误以为字符串已经结束,剩下的内容就会触发Unexpected end of JSON input错误。而在线解析器通常会做容错处理,自动忽略外层多余的引号,所以能正常解析。
解决方案
最简单的处理方式是先移除responseText首尾的双引号,再进行解析:
// 先去除两端空白,再截取掉首尾的双引号 const cleanedResponse = responseText.trim().slice(1, -1); const parsedData = JSON.parse(cleanedResponse);
如果担心首尾可能存在其他非引号的空白或字符,也可以用正则表达式精准匹配并移除外层的双引号:
const cleanedResponse = responseText.replace(/^"|"$/g, ''); const parsedData = JSON.parse(cleanedResponse);
额外建议
如果这个响应是你自己服务端返回的,最好直接修改服务端代码,返回标准的JSON格式(也就是去掉外层的双引号,直接返回{"session_id": "AAAAAAABvgm8szOYtCcbQg"}),这样前端就不需要额外处理,更符合规范。
内容的提问来源于stack exchange,提问作者Alex Knopp
相关产品推荐
相关产品推荐

