如何在TypeScript中解析指定JSON字符串?JSON.parse报错排查
解决JSON.parse()解析MongoDB查询字符串的报错问题
错误原因
你的问题出在JSON语法不规范和JavaScript字符串转义错误:
- JSON要求所有键(比如
$and、status、$ne)必须用双引号包裹,不能省略 - JSON里的字符串值只能用双引号,单引号
'不符合JSON规范 - 在JS中用双引号包裹字符串时,内部的双引号必须用反斜杠
\转义,否则会触发语法错误
正确的解决方法
方法1:直接使用JavaScript对象(推荐)
如果不需要把查询作为字符串处理,直接定义JS对象就行,不用JSON.parse():
const query = { $and: [ { status: { $ne: 'Completed' } }, { status: { $ne: 'Canceled' } } ] };
这种写法既符合MongoDB的查询语法,也不会有JSON解析问题。
方法2:规范JSON字符串并正确转义
如果必须用字符串形式,要确保JSON语法正确,同时转义内部双引号:
const queryStr = "{ \"$and\": [{ \"status\": { \"$ne\": \"Completed\" } }, { \"status\": { \"$ne\": \"Canceled\" } }] }"; const query = JSON.parse(queryStr);
或者用单引号包裹整个字符串,内部用双引号,这样不用转义:
const queryStr = '{ "$and": [{ "status": { "$ne": "Completed" } }, { "status": { "$ne": "Canceled" } }] }'; const query = JSON.parse(queryStr);
验证
用上面的方法处理后,JSON.parse()就能正常解析,不会再出现SyntaxError: Unexpected token ' in JSON at position 31的错误。
内容的提问来源于stack exchange,提问作者BHakti K
相关产品推荐
相关产品推荐

