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')) ;