如何检查字符串是否为有效的 JSON 字符串?

2022-08-29 22:31:52
isJsonString('{ "Id": 1, "Name": "Coke" }')

应该是和true

isJsonString('foo')
isJsonString('<div>foo</div>')

应该是 。false

我正在寻找一个不使用/的解决方案,因为我的调试器设置为“在所有错误时中断”,这会导致它在无效的JSON字符串上中断。trycatch


答案 1

使用 JSON 解析器,如 JSON.parse

function isJsonString(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}

答案 2

我知道我对这个问题迟到了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;
};