就像是:
var jsonString = '{ "Id": 1, "Name": "Coke" }';
//should be true
IsJsonString(jsonString);
//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")
解决方案不应包含try / catch。 我们中的一些人打开“打破所有错误”,他们不喜欢调试器打破那些无效的JSON字符串。
#1楼
function get_json(txt)
{ var data
try { data = eval('('+txt+')'); }
catch(e){ data = false; }
return data;
}
如果有错误,则返回false。
如果没有错误,则返回json数据
#2楼
我知道我对这个问题迟到了3年,但我感觉很高兴。
尽管Gumbo的解决方案效果很好,但它不能处理少数情况下JSON.parse({something that isn't JSON})
异常)不会引发异常的情况。
我还希望同时返回解析后的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;
};
#3楼
这个答案减少了trycatch语句的成本。
我使用JQuery解析JSON字符串,并使用trycatch语句处理异常,但是对无法解析的字符串抛出异常会减慢我的代码的速度,因此我使用简单的Regex来检查字符串(如果它是可能的JSON字符串)是否不作任何处理通过检查其语法,然后我使用常规方法通过使用JQuery解析字符串:
if (typeof jsonData == 'string') {
if (! /^[\[|\{](\s|.*|\w)*[\]|\}]$/.test(jsonData)) {
return jsonData;
}
}
try {
jsonData = $.parseJSON(jsonData);
} catch (e) {
}
我将先前的代码包装在一个递归函数中,以解析嵌套的JSON响应。
#4楼
我使用了一种非常简单的方法来检查字符串是否是有效的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。
每次都有效。 :)
#5楼
// 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
。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3159269