JSON.parse()是唯一标准且最安全的JSON解析方式,必须配合try…catch捕获SyntaxError,并校验输入字符串合法性(双引号、无尾逗号、无注释、无undefined等),禁用eval或Function构造函数;可选reviver函数实现解析中数据转换或过滤。

用 JSON.parse() 是最标准、最安全的方式,但必须配合错误处理和格式校验,不能直接裸用。
必须用 JSON.parse(),别碰 eval 或构造函数
JSON.parse() 是浏览器和 Node.js 内置的专用解析器,只认合法 JSON 语法,不执行任意代码。而 eval()、Function() 或正则替换等替代方案存在严重安全风险——如果字符串来自用户输入或不可信接口,可能执行恶意脚本。
- ✅ 正确:
JSON.parse('{"name":"Alice","age":28}') - ❌ 危险:
eval(`(${userInput})`)—— 输入{"name":"Alice","age":28}; alert(1)就会弹窗 - ❌ 不标准:
new Function('return ' + str)()同样有执行风险
一定要加 try…catch 捕获 SyntaxError
非法 JSON(比如单引号、尾逗号、注释、undefined)会导致 JSON.parse() 立即抛出 SyntaxError,不捕获就会中断程序。
- 常见非法示例:
JSON.parse("{'name':'Tom'}")(单引号)、JSON.parse('{"id":1,}')(尾逗号) - 安全写法:
const data = JSON.parse(jsonString);
console.log(data);
} catch (e) {
if (e instanceof SyntaxError) {
console.error("JSON 格式错误:", e.message);
} else {
console.error("其他错误:", e);
}
}
注意 JSON 的严格语法限制
JSON 不是 JS 对象字面量的简化版,它有自己明确的语法规则:
- 所有键名和字符串值必须用双引号包裹(
"name"✅,'name'❌,name❌) - 不允许注释(
//或/* */) - 不允许尾随逗号(
{"a":1,}❌) - 不支持
undefined、function、NaN、Infinity、Symbol -
null、布尔值、数字、数组、对象都合法
可选:用 reviver 函数做数据清洗
第二个参数 reviver 是个函数,能在解析过程中逐层处理每个键值对,适合过滤、类型转换或脱敏。
- 例如剔除所有小于等于 0 的数值:
const obj = JSON.parse(json, (key, value) =>
typeof value === 'number' && value );
// → { y: 12 }
注意:返回 undefined 会删除该属性;返回其他值会替换原值;返回 value 表示保留不变。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











