让我们回顾一下(2019+)。
参数:值,例如true
,false
,null
是有效JSON(?)
事实:这些原始值是JSON 可解析的,但它们不是格式良好的 JSON 结构。JSON 规范表明 JSON 建立在两种结构上:名称/值对(对象)的集合或值的有序列表(数组)。
论点:不应使用异常处理来执行预期的操作。
(这是一条有 25 多个赞成票的评论!)
事实:不!使用 try/catch 绝对是合法的,尤其是在这种情况下。否则,你需要做很多字符串分析的工作,比如标记/正则表达式操作;这将有可怕的表现。
hasJsonStructure()
如果您的目标是检查某些数据/文本是否具有正确的 JSON 交换格式,这将非常有用。
function hasJsonStructure(str) {
if (typeof str !== 'string') return false;
try {
const result = JSON.parse(str);
const type = Object.prototype.toString.call(result);
return type === '[object Object]'
|| type === '[object Array]';
} catch (err) {
return false;
}
}
用法:
hasJsonStructure('true') // —» false
hasJsonStructure('{"x":true}') // —» true
hasJsonStructure('[1, false, null]') // —» true
safeJsonParse()
如果您想在将某些数据解析为 JavaScript 值时小心谨慎,这将非常有用。
function safeJsonParse(str) {
try {
return [null, JSON.parse(str)];
} catch (err) {
return [err];
}
}
用法:
const [err, result] = safeJsonParse('[Invalid JSON}');
if (err) {
console.log('Failed to parse JSON: ' + err.message);
} else {
console.log(result);
}