最可靠的方法是用 JSON.parse() 尝试解析并捕获异常来判断是否合法;需先检查输入是否为字符串,再用 try-catch 包装解析逻辑返回布尔值,严格遵循 JSON 标准(双引号、无尾逗号、无注释、无 undefined/NaN/Infinity/函数等)。

最可靠的方法是用 JSON.parse() 尝试解析,捕获异常来判断是否合法。
使用 try-catch 调用 JSON.parse
JSON 规范严格,任何格式错误(如尾逗号、单引号、未转义字符、undefined 或函数)都会导致 JSON.parse() 抛出 SyntaxError。这是浏览器和 Node.js 原生支持的权威校验方式。
- 只接受标准 JSON:双引号键名和字符串、无尾逗号、无注释、无 undefined / NaN / Infinity / 函数 / 循环引用
- 空字符串、纯空白、
null、true、false、数字、字符串、数组、对象都算合法 JSON(只要格式正确) - 示例:
JSON.parse('{"name":"Alice"}')✅;JSON.parse("{'name':'Alice'}")❌(单引号不合法)
封装成可复用的校验函数
把解析逻辑包装成一个返回布尔值的函数,便于多次调用:
function isValidJSON(str) {
if (typeof str !== 'string') return false;
try {
JSON.parse(str);
return true;
} catch (e) {
return false;
}
}
注意:必须先判断类型,否则传入 null、undefined 或对象会直接跳过解析,返回 true(但它们不是“字符串形式的 JSON”)。
立即学习“Java免费学习笔记(深入)”;
常见易错点提醒
很多看似像 JSON 的字符串其实不符合规范:
- 用单引号包裹字符串或键名 → 不合法
- 键名没加引号(如
{name: "Alice"})→ 不合法 - 末尾多了一个逗号(如
["a","b",])→ 不合法 - 包含 JavaScript 特有字面量(
undefined、Infinity、NaN)→ 不合法 - 注释(
{"a":1}// comment)→ 不合法
不需要引入第三方库
现代 JavaScript 运行时(Chrome、Firefox、Safari、Node.js ≥ 0.10)都内置了严格遵循 ECMA-404 标准的 JSON.parse,无需额外依赖。若需更详细的错误定位(比如指出哪一行出错),可捕获 e.message 或使用 try...catch 结合 str.split('\n') 手动映射位置,但常规校验只需布尔结果。


















