AJAX:检查一个string是否是JSON?

我的JavaScript有时会崩溃在这一行:

var json = eval('(' + this.responseText + ')'); 

eval()的参数不是JSON时引起崩溃。 在进行这个调用之前,有什么方法可以检查string是否是JSON?

我不想使用框架 – 有没有什么办法使用eval()来完成这个工作? (有一个很好的理由,我保证。)

如果您包含json.org的JSONparsing器 ,那么可以使用它的parse()函数,并将其包装在try / catch中,如下所示:

 try { var json = JSON.parse(this.responseText); } catch(e) { alert('invalid json'); } 

像这样的东西可能会做你想要的。

她的jQuery的替代scheme…

 try { var jsonObject = jQuery.parseJSON(yourJsonString); } catch(e) { // handle error } 

我强烈build议您使用JavaScript JSON库来序列化和从JSON。 eval()是一个安全风险,除非你确定它的input已被消毒和安全,否则绝不应该被使用。

有了一个JSON库,只需要将调用的parse()等价物包装到一个try / catch-block中来处理非JSONinput:

 try { var jsonObject = JSON.parse(yourJsonString); } catch(e) { // handle error } 

Promise而不是Try-catch

 npm install is-json-promise ; //for NodeJS environment. 

要么

 String.IsJSON = (candidate) => new Promise( (resolve, reject) => resolve(JSON.parse(candidate)) ) ; 

用例 :

 String.IsJSON(`iam here`) .then((object) => console.info(object)) .catch((error) => alert('Waww, i cannot be JSON')) ; // promise will run catch 

要么

 String.IsJSON(`{"welcome":"Hello"}`) .then((object) => console.info(object)) // promise will run "then" .catch((error) => alert('Waww, i cannot be JSON')) ;