json解析失败会抛出syntaxerror,必须用try-catch捕获;应校验输入为非空字符串,封装safeparsejson函数返回null或默认值,并区分错误类型,配合fetch时需先检查response.ok再解析。

JSON 解析失败时,JSON.parse() 会抛出语法错误(SyntaxError),必须用 try-catch 捕获,否则会中断执行。
基本写法:包裹 parse 调用
把 JSON.parse() 放在 try 块中,异常会在 catch 中被捕获。注意不要直接对不可信字符串调用 parse,比如用户输入、网络响应体或 localStorage 里的内容。
- 确保传入的是字符串类型(非 null、undefined 或对象)
-
catch参数通常是error,可检查error.name === 'SyntaxError'来确认是 JSON 格式问题 - 避免空
catch—— 至少记录错误或提供默认值
安全解析函数:封装成可复用工具
写一个健壮的解析函数,返回解析结果或 null(或自定义默认值),便于业务逻辑统一处理:
function safeParseJSON(str) {
if (typeof str !== 'string' || str.trim() === '') return null;
try {
return JSON.parse(str);
} catch (e) {
console.warn('JSON 解析失败:', e.message, '输入:', str);
return null;
}
}
调用示例:const data = safeParseJSON(localStorage.getItem('config')) || {};
区分错误类型:避免误捕其他异常
虽然多数情况是 SyntaxError,但也要考虑其他可能,比如内存溢出或递归过深(少见)。若需精确处理,可在 catch 中判断:
-
e instanceof SyntaxError→ JSON 格式错误 -
e.name === 'TypeError'→ 传入了非字符串(如 undefined) - 其余异常建议重新抛出或打点监控,不静默吞掉
配合 fetch 使用:注意响应体格式
从接口获取 JSON 时,常见错误是没等响应完成就解析,或未检查 response.ok。正确做法:
- 先用
await response.json()(它内部已处理解析异常,仍需try-catch) - 或手动读取
text()再JSON.parse(),适合需要预处理响应文本的场景 - 服务端返回非 JSON 内容(如 HTML 错误页)时,
response.json()也会抛错,必须捕获
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











