如何在不使用Try / Catch的情况下检查字符串在JavaScript中是否为有效的JSON字符串

JavaScript

十三小哥

2020-03-12

就像是:

var jsonString = '{ "Id": 1, "Name": "Coke" }';

//should be true
IsJsonString(jsonString);

//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")

解决方案不应包含try / catch。我们中的一些人打开“打破所有错误”,他们不喜欢调试器打破那些无效的JSON字符串。

第1117篇《如何在不使用Try / Catch的情况下检查字符串在JavaScript中是否为有效的JSON字符串》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

6个回答
JimJim 2020.03.12
if(resp) {
    try {
        resp = $.parseJSON(resp);
        console.log(resp);
    } catch(e) {
        alert(e);
    }
}

hope this works for you too

乐逆天 2020.03.12

这也是 TypeScript版本:

JSONTryParse(input) {
    try {
        //check if the string exists
        if (input) {
            var o = JSON.parse(input);

            //validate the result too
            if (o && o.constructor === Object) {
                return o;
            }
        }
    }
    catch (e) {
    }

    return false;
};
宝儿Harry 2020.03.12

我想我知道您为什么要避免这种情况。但是也许尝试并抓住!==尝试并抓住。; o)这在我脑海中浮现:

var json_verify = function(s){ try { JSON.parse(s); return true; } catch (e) { return false; }};

因此,您可能还会弄脏剪辑到JSON对象,例如:

JSON.verify = function(s){ try { JSON.parse(s); return true; } catch (e) { return false; }};

由于已尽可能概括,它可能不会因错误而中断。

Jim老丝梅 2020.03.12

也许会有用:

    function parseJson(code)
{
    try {
        return JSON.parse(code);
    } catch (e) {
        return code;
    }
}
function parseJsonJQ(code)
{
    try {
        return $.parseJSON(code);
    } catch (e) {
        return code;
    }
}

var str =  "{\"a\":1,\"b\":2,\"c\":3,\"d\":4,\"e\":5}";
alert(typeof parseJson(str));
alert(typeof parseJsonJQ(str));
var str_b  = "c";
alert(typeof parseJson(str_b));
alert(typeof parseJsonJQ(str_b));

输出:

IE7:字符串,对象,字符串,字符串

CHROME:对象,对象,字符串,字符串

L猪猪 2020.03.12

使用JSON解析器,例如JSON.parse

function IsJsonString(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}
十三西里GO 2020.03.12

在prototypeJS中,我们有isJSON方法你可以试试看。甚至json也可能有帮助。

"something".isJSON();
// -> false
"\"something\"".isJSON();
// -> true
"{ foo: 42 }".isJSON();
// -> false
"{ \"foo\": 42 }".isJSON();

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android