判断一个字符串是否是JSON字符串

在开发过程中,我们常遇到这样的格式:"{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;
    }

校验完成!

你可能感兴趣的:(判断一个字符串是否是JSON字符串)