我在创建一种在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致命错误。 在这样的场景中更优雅地处理致命错误是非常常见的吗?
答案 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