JSON.parse()遇非法字符串会抛SyntaxError致脚本中断,必须用try...catch包裹并判断error instanceof SyntaxError来精准捕获,避免误吞其他异常。

JSON.parse() 遇到非法 JSON 字符串时会直接抛出 SyntaxError,导致脚本中断。必须用 try...catch 包裹才能捕获并避免崩溃。
基本写法:用 try...catch 包住 JSON.parse
把 JSON.parse() 放在 try 块中,异常会在 catch 中被捕获,不会向上冒泡:
let jsonString = '{ "name": "Alice", "age": }'; // 缺少值,语法错误
let data;
<p>try {
data = JSON.parse(jsonString);
} catch (error) {
console.error('JSON 解析失败:', error.message);
data = null; // 或设为默认值、空对象等
}捕获具体错误类型,避免误处理其他异常
不是所有错误都该被静默吞掉。建议检查 error 是否为 SyntaxError,再决定如何响应:
立即学习“Java免费学习笔记(深入)”;
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
-
只处理 JSON 语法错误:用
error instanceof SyntaxError判断 - 其他错误(如内存溢出、TypeError)仍可抛出或单独记录
function safeParse(jsonStr) {
try {
return JSON.parse(jsonStr);
} catch (error) {
if (error instanceof SyntaxError) {
console.warn('无效 JSON 格式,返回 null:', error.message);
return null;
}
throw error; // 其他错误不拦截,让调用方处理
}
}常见非法 JSON 场景与对应提示
以下字符串都会触发 SyntaxError,需靠 catch 捕获:
- 末尾逗号:
{ "a": 1, } - 单引号代替双引号:
{ 'name': 'Bob' } - 缺少引号的键名:
{ name: "Tom" } - 未闭合的括号或引号:
{ "msg": "hello - 尾部多余字符:
{"x":1} extra
注意:JSON.parse(null) 或 JSON.parse(undefined) 会报 TypeError(不是 SyntaxError),也要在 catch 中留意。
配合可选链或空值合并做安全兜底
解析后常需取值,可结合可选链(?.)和空值合并(??)避免后续报错:
const userJson = '{"name":"Lily"}';
const user = safeParse(userJson);
console.log(user?.name ?? '匿名用户'); // 安全取值这样即使 safeParse 返回 null,也不会因 user.name 报 TypeError。

















