JSON.parse解析失败报错,已转义引号仍无法解析的原因咨询
问题根源:JavaScript字符串转义与JSON转义的冲突
嘿,这个坑我之前也踩过!问题出在JavaScript字符串字面量的转义优先级比JSON转义高,导致你写的转义符被提前处理了,没传到JSON.parse里。
具体原因分析
你写的代码里,用单引号包裹了JSON字符串:
var jsobj = JSON.parse( '{"lineID":11,"siteID":3,"mystring":"this is a \"Test\" string with quotes"}' );
当JavaScript解析这个单引号字符串时,里面的\"会被直接转换成普通的双引号"。也就是说,实际传给JSON.parse的字符串是这样的:
{"lineID":11,"siteID":3,"mystring":"this is a "Test" string with quotes"}
这下JSON里的双引号就没被正确转义,自然触发了SyntaxError。
而在线解析器能正常工作,是因为它直接读取你输入的原始字符串,没有经过JavaScript的字面量解析步骤,所以\"被当作合法的JSON转义符处理。
两种解决方案
方案1:双重转义反斜杠
把字符串里的\"改成\\",这样JavaScript解析后会保留一个\,传给JSON.parse的就是正确的转义双引号:
var jsobj = JSON.parse( '{"lineID":11,"siteID":3,"mystring":"this is a \\"Test\\" string with quotes"}' );
方案2:使用模板字符串(反引号包裹)
模板字符串不会解析里面的\"转义符,直接把原始内容传给JSON.parse,写法更简洁:
var jsobj = JSON.parse( `{"lineID":11,"siteID":3,"mystring":"this is a \"Test\" string with quotes"}` );
试试这两种方法,应该就能正常解析啦!
内容的提问来源于stack exchange,提问作者PapillonUK
相关产品推荐
相关产品推荐

