让我们回顾一下(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);
}