如何检查字符串是否为有效的 JSON 字符串?
2022-08-29 22:31:52
isJsonString('{ "Id": 1, "Name": "Coke" }')
应该是和true
isJsonString('foo')
isJsonString('<div>foo</div>')
应该是 。false
我正在寻找一个不使用/的解决方案,因为我的调试器设置为“在所有错误时中断”,这会导致它在无效的JSON字符串上中断。try
catch
isJsonString('{ "Id": 1, "Name": "Coke" }')
应该是和true
isJsonString('foo')
isJsonString('<div>foo</div>')
应该是 。false
我正在寻找一个不使用/的解决方案,因为我的调试器设置为“在所有错误时中断”,这会导致它在无效的JSON字符串上中断。try
catch
使用 JSON 解析器,如 JSON.parse
:
function isJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
我知道我对这个问题迟到了3年,但我想插话。
虽然Gumbo的解决方案效果很好,但它不能处理少数情况下没有异常的情况。JSON.parse({something that isn't JSON})
我也更喜欢同时返回解析的JSON,因此调用代码不必再次调用。JSON.parse(jsonString)
这似乎很适合我的需求:
/**
* If you don't care about primitives and only objects then this function
* is for you, otherwise look elsewhere.
* This function will return `false` for any valid json primitive.
* EG, 'true' -> false
* '123' -> false
* 'null' -> false
* '"I'm a string"' -> false
*/
function tryParseJSONObject (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;
};