如何在不使用Try / Catch的情况下检查字符串是否是JavaScript中的有效JSON字符串 [英] How to check if a string is a valid JSON string in JavaScript without using Try/Catch
问题描述
类似于:
var jsonString = '{ "Id": 1, "Name": "Coke" }';
//should be true
IsJsonString(jsonString);
//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")
解决方案应该不包含try / catch。我们中的一些人打开中断所有错误并且他们不喜欢调试器打破那些无效的JSON字符串。
The solution should not contain try/catch. Some of us turn on "break on all errors" and they don't like the debugger breaking on those invalid JSON strings.
推荐答案
首先发表评论。问题是关于不使用 try / catch
。
如果您不介意使用它,请阅读以下答案。
这里我们只使用正则表达式检查 JSON
字符串,它在大多数情况下都有效,而不是所有情况。
A comment first. The question was about not using try/catch
.
If you do not mind to use it, read the answer below.
Here we just check a JSON
string using a regexp, and it will work in most cases, not all cases.
在中查看第450行https://github.com/douglascrockford/JSON-js/blob/master/json2.js
有一个regexp检查有效的JSON ,类似于:
There is a regexp that check for a valid JSON, something like:
if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
//the json is ok
}else{
//the json is not ok
}
编辑:新版本的json2.js进行了比上面更高级的解析,但仍然基于regexp替换(f @Mrchief评论)
EDIT: The new version of json2.js makes a more advanced parsing than above, but still based on a regexp replace ( from the comment of @Mrchief )
这篇关于如何在不使用Try / Catch的情况下检查字符串是否是JavaScript中的有效JSON字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!