使用JSON.parse()解析字符串报错:SyntaxError: Unexpected token M如何解决?
为什么JSON.parse("MOODY'S NUMBER")会抛出SyntaxError?
这个问题的核心是你误解了JSON.parse()的作用——它不是用来解析普通字符串的,而是用来处理符合JSON语法规范的文本的。咱们一步步拆解原因和解决办法:
问题根源
JSON有非常严格的语法规则,其中两个关键点直接导致了你的报错:
- JSON里的字符串必须用双引号包裹,单引号是不被JSON标准认可的
- 传给
JSON.parse()的参数必须是完整的JSON格式内容(比如"abc"是合法的JSON字符串,而abc本身不是)
再看你的两个调用场景:
JSON.parse("00145"):严格来说这也不是合法JSON,但部分JS引擎会做宽松处理,把它当作数字解析后转成字符串(不过更可能是你这里的表述有小误差——如果你的Value实际是'"00145"'这种带双引号的字符串,JSON.parse就能正确返回"00145")JSON.parse("MOODY'S NUMBER"):解析器看到的第一个字符是M,既不是JSON允许的起始标记(双引号、{、[、数字、true/false/null),而且字符串里的单引号也违反了JSON规范,所以直接抛出SyntaxError。
解决方案
根据你的实际需求,有两种处理方式:
- 如果
Value本身就是普通业务字符串:完全不需要调用JSON.parse(),直接使用这个值即可。示例代码:const results = [{"Value": "00145"}, {"Value": "MOODY'S NUMBER"}]; results.forEach(item => { const value = item.Value; // 直接使用,不需要parse console.log(value); }); - 如果
Value是序列化后的JSON字符串:确保它是合法的JSON格式再解析。比如要解析成字符串类型的JSON值,必须用双引号包裹,内部特殊字符要转义:// 合法的JSON格式字符串 const validJsonStr = '"MOODY\'S NUMBER"'; const parsedValue = JSON.parse(validJsonStr); // 正确返回 "MOODY'S NUMBER"
内容的提问来源于stack exchange,提问作者Anita
相关产品推荐
相关产品推荐

