Javascript 处理JSON.parse()中不可解析输入的异常

Javascript 处理JSON.parse()中不可解析输入的异常,javascript,json,parsing,Javascript,Json,Parsing,我在JS中创建管理cookie的方法时遇到了这个问题。My Cookie可以包含JSON格式的字符串: var cookieContents = '{"type":"cookie","isLie":true}'; 。。。或者只是普通字符串: var cookieContents = 'The cookie is a lie'; 要解析cookie,我最好使用JSON.parsecookieContents。问题是JSON.parse无法解析普通字符串并抛出致命错误 我的问题是,处理这种情况的

我在JS中创建管理cookie的方法时遇到了这个问题。My Cookie可以包含JSON格式的字符串:

var cookieContents = '{"type":"cookie","isLie":true}';
。。。或者只是普通字符串:

var cookieContents = 'The cookie is a lie';
要解析cookie,我最好使用JSON.parsecookieContents。问题是JSON.parse无法解析普通字符串并抛出致命错误

我的问题是,处理这种情况的最佳/最被广泛接受的方式是什么

我已尝试使用try/catch语句:

var cookie1 = '{"type":"cookie","isLie":true}';
var cookie2 = 'The cookie is a lie';

function parseCookieString(str){
    var output;

    try{
        output = JSON.parse(str);
    } catch(e){
        output = str;
    }

    console.log(output);
}

parseCookieString(cookie1); // outputs object
parseCookieString(cookie2); // outputs string

这个很好用,但感觉脏。可能是因为我通常不处理JS致命错误。在这样的场景中,更优雅地处理致命错误是很常见的吗?

执行try-catch是有意义的,但是如果JSON.parse由于输出变量以外的原因引发错误,则可能最终包含您不希望包含的内容

这是一个有趣的问题。我会这样做-基本上检查字符串中是否存在{和}:

function parseCookieString(str){
    var output;

    if (!!str.match(/^{.+}$/)) {
      output = JSON.parse(str);
    } else {
      output = str;
    }

    console.log(output);
}

parseCookieString(cookie1); // outputs object
parseCookieString(cookie2); // outputs string

这实际上是JSON.parse中的一个设计错误哦!JavaScript中的设计错误!太罕见了!哦,等等…->这不是致命错误,它应该返回null或其他值。或者它应该有一个只检查有效性的方法,如JSON.isValid,这可能是最干净的解决方案。字符串被包装在大括号内的事实并不意味着它是有效的JSON。不确定问题是否是无效的JSON。基本上,他提供了两个选项:数据中的有效JSON或数据中的有效字符串。上面的解决方案解决了这个确切的问题。。。有意义吗?如果他有{cookie是个谎言。}?那是无效的JSON,这正是OP不关心的。我们还不如担心他有:cookie是个谎言。