javascript中的isJSON,没有try / catch

时间:2012-11-13 10:38:29

标签: javascript regex json

  

可能重复:
  How to check if a string is a valid JSON string in JavaScript without using Try/Catch

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

所以似乎使用try / catches不这样做的唯一方法是通过regexps;其中一个答案中给出的正则表达式只是针对eval进行验证,所以像“2001-05-06”这样的简单字符串会传递正则表达式,即使它不是JSON。

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

2 个答案:

答案 0 :(得分:2)

使用正则表达式而不是try / catch正在用非工作黑客替换正确的解决方案。

您提供的链接建议更改您可以修改的JSON parsing code以不抛出异常。我建议在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修改“建议”假设管理所有循环/递归的中断,这正是异常所做的。

答案 1 :(得分:0)

来自link试试这个

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');
}