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

时间:2014-10-27 23:09:40

标签: javascript json parsing

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

var cookieContents = '{"type":"cookie","isLie":true}';

......或者只是简单的字符串:

var cookieContents = 'The cookie is a lie';

要解析cookie,我最好做JSON.parse(cookieContents)。这个问题是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

http://jsfiddle.net/fmpeyton/7w60cesp/

这种方法非常好,但感觉很脏。也许是因为我通常不处理JS致命错误。 在这样的场景中更优雅地处理致命错误是非常常见的吗?

1 个答案:

答案 0 :(得分:0)

尝试使用try catch是有道理的,但是如果JSON.parse因为其他内容而导致错误,那么output变量可能最终会包含您不想要的内容。

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

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
相关问题