0

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

这里已经提出了这个问题:How to check if a string is a valid JSON string in JavaScript without using Try/Catch。没有给出有效的答案,即使是经过验证的人也没有回答问题。

因此,似乎不使用 try/catch 执行此操作的唯一方法是通过正则表达式;其中一个答案中给出的正则表达式仅针对 eval 进行验证,因此像“2001-05-06”这样的简单字符串将通过正则表达式,即使它不是 JSON。

那么有没有人用一个好的正则表达式来验证一个格式良好的 JSON 字符串?

4

2 回答 2

2

使用正则表达式而不是 try/catch 正在用无效的 hack 替换正确的解决方案。

您提供的链接建议更改您可以修改的JSON 解析代码以不引发异常。我建议在json_parse.js中替换以下代码

    error = function (m) {
    // Call error when something is wrong.
        throw {
            name:    'SyntaxError',
            message: m,
            at:      at,
            text:    text
        };
    },

通过调用您将提供的回调。

但坦率地说,我最合理的建议是使用 try/catch。这是您在这里拥有的最好的工具。请注意,我的 JSON.parse 修改“建议”应该管理所有循环/递归的中断,这正是异常所做的。

于 2012-11-13T10:44:47.930 回答
0

链接试试这个

var jsonData = '{"1":"test"}';

if (/^[\],:{}\s]*$/.test(jsonData.replace(/\\["\\\/bfnrtu]/g, '@'). replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {    
    alert('ok');
}else{    
    alert('no');
}
于 2012-11-13T10:54:48.050 回答