就像是: 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
。