就像是: json
var jsonString = '{ "Id": 1, "Name": "Coke" }'; //should be true IsJsonString(jsonString); //should be false IsJsonString("foo"); IsJsonString("<div>foo</div>")
解决方案不该包含try / catch。 咱们中的一些人打开“打破全部错误”,他们不喜欢调试器打破那些无效的JSON字符串。 函数
function get_json(txt) { var data try { data = eval('('+txt+')'); } catch(e){ data = false; } return data; }
若是有错误,则返回false。 this
若是没有错误,则返回json数据 spa
我知道我对这个问题迟到了3年,但我感受很高兴。 调试
尽管Gumbo的解决方案效果很好,但它不能处理少数状况下JSON.parse({something that isn't JSON})
异常)不会引起异常的状况。 code
我还但愿同时返回解析后的JSON,所以调用代码没必要再次调用JSON.parse(jsonString)
。 对象
这彷佛很好地知足了个人需求: 递归
function tryParseJSON (jsonString){ try { var o = JSON.parse(jsonString); // Handle non-exception-throwing cases: // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking, // but... JSON.parse(null) returns null, and typeof null === "object", // so we must check for that, too. Thankfully, null is falsey, so this suffices: if (o && typeof o === "object") { return o; } } catch (e) { } return false; };
这个答案减小了trycatch语句的成本。 字符串
我使用JQuery解析JSON字符串,并使用trycatch语句处理异常,可是对没法解析的字符串抛出异常会减慢个人代码的速度,所以我使用简单的Regex来检查字符串(若是它是可能的JSON字符串)是否不做任何处理经过检查其语法,而后我使用常规方法经过使用JQuery解析字符串: get
if (typeof jsonData == 'string') { if (! /^[\[|\{](\s|.*|\w)*[\]|\}]$/.test(jsonData)) { return jsonData; } } try { jsonData = $.parseJSON(jsonData); } catch (e) { }
我将先前的代码包装在一个递归函数中,以解析嵌套的JSON响应。
我使用了一种很是简单的方法来检查字符串是不是有效的JSON。
function testJSON(text){ if (typeof text!=="string"){ return false; } try{ JSON.parse(text); return true; } catch (error){ return false; } }
结果与有效的JSON字符串:
var input='["foo","bar",{"foo":"bar"}]'; testJSON(input); // returns true;
结果用一个简单的字符串;
var input='This is not a JSON string.'; testJSON(input); // returns false;
结果与一个对象:
var input={}; testJSON(input); // returns false;
输入为空的结果:
var input=null; testJSON(input); // returns false;
最后一个返回false,由于null变量的类型是object。
每次都有效。 :)
// vanillaJS function isJSON(str) { try { return (JSON.parse(str) && !!str); } catch (e) { return false; } }
用法: isJSON({})
为false
, isJSON('{}')
为true
。
要检查某物是Array
仍是Object
( 已解析的 JSON):
// vanillaJS function isAO(val) { return val instanceof Array || val instanceof Object ? true : false; } // ES2015 var isAO = (val) => val instanceof Array || val instanceof Object ? true : false;
用法: isAO({})
为true
, isAO('{}')
为false
。