判断一个字符串是否是JSON字符串
2019-11-14 本文已影响0人
wellen2000
在开发过程中,我们常遇到这样的格式:"{message:'八百标兵奔北坡'}"
以及"{message:'{type:'notice',title:'标兵怕把炮兵碰'}'}"
,这两个都是字符串,常常需要使用JSON.parse来对message
这个字段进行转化为json对象.
但是有个问题,如果要同时兼容以上两种格式的话,使用JSON.parse转译非json格式的字符串时会报错,比如:JSON.parse('八百标兵奔北坡')
,那么我们需要怎么判断这个字符串是否可以转化为json对象呢?
按一般的思路先来实现一下:
// 先判断是不是字符串
// 使用try-catch来捕捉错误,如果出错就判定是非json
function isJSON(str) {
if (typeof str === 'string') {
try {
JSON.parse(str);
return true;
} catch(e) {
return false;
}
}
console.log('非字符串!')
}
这样是否完成了呢?
在校验中发现,输入"123456789"
这样的字符串也是可以通过的,但这个不是json啊,所以我们还需要改进一下:
// 使用try-catch去捕捉错误
// 直接使用JSON.parse去转译,并把转译结果判断一下是不是object类型,如果是的话就返回true,否则就返回false,这样就排除了转化后非object的类型,比如"123456789"
function isJSON(str) {
try {
if (typeof JSON.parse(str) == "object") {
return true;
}
} catch(e) {
}
return false;
}
校验完成!