最可靠方式是用 json.parse() 加 try...catch;正则无法处理嵌套、引号配对、转义符、unicode,且无法识别单引号、无引号键、尾随逗号、undefined、nan、注释等非法格式。

最直接、最可靠的方式是用 JSON.parse() 加 try...catch,而不是正则表达式。
为什么不能用正则校验 JSON?
正则表达式无法处理 JSON 的嵌套结构、引号配对、转义字符(如 "\n"、"\"")、Unicode 编码(如 "\u4f60"),也判别不了单引号、尾随逗号、undefined、NaN、注释等非法写法。看似能匹配一部分,但极易漏判或误判,不具工程可靠性。
标准做法:用 JSON.parse() 捕获 SyntaxError
这是浏览器和 Node.js 原生支持、完全符合 JSON 标准的唯一推荐方式:
- 调用
JSON.parse(str)尝试解析字符串 - 如果成功,说明字符串是合法 JSON(且能转成有效 JS 值)
- 如果抛出
SyntaxError,说明格式非法 - 注意:空值、非字符串类型输入应提前过滤
基础校验函数示例
一个稳妥的判断函数长这样:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
function isValidJSON(str) {
if (typeof str !== 'string') return false;
try {
JSON.parse(str);
return true;
} catch (e) {
return e instanceof SyntaxError;
}
}
它能准确识别以下非法情况:
-
{"name": 'Alice'}(单引号)→ false -
{name: "Alice"}(键名没引号)→ false -
["a","b",](末尾多余逗号)→ false -
{"x": undefined}或{"y": NaN}→ false -
{"a":1}// comment(含注释)→ false
需要更严格的语义校验?放在 parse 之后
JSON.parse() 只管语法合法,不管业务规则。比如要求必须是对象、某个字段必须存在、数组长度不能超限——这些都应在解析成功后,用 JavaScript 对返回值做类型和内容检查:
- 确认是对象:
typeof result === 'object' && result !== null && !Array.isArray(result) - 检查必填字段:
result.name !== undefined && typeof result.name === 'string' - 限制数组长度:
Array.isArray(result.items) && result.items.length
这类逻辑不适合也不应该塞进正则里。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










