2014-10-27 51 views
0

我在創建一種管理JS中cookie的方法時遇到了這個問題。我的Cookie可以包含在JSON格式字符串:處理異常從不可解析的輸入到JSON.parse()

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

...或只是簡單的字符串:

var cookieContents = 'The cookie is a lie'; 

爲了解析餅乾,我會做最好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

這其實是在'JSON.parse設計錯誤()'(哦,一個設計錯誤在JavaScript這樣!罕見!ohwait ...) - >這不應該是一個致命的錯誤,它應該返回null或什麼。或者它應該有一個只檢查有效性的方法(如'JSON.isValid()',這可能是最乾淨的解決方案。) – 2014-10-27 23:16:54

回答

0

做一個嘗試抓住是有道理的,但如果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 
+0

字符串被包裹在花括號內的事實不會使其有效JSON。 – 2014-10-28 00:00:37

+0

不確定問題是無效的JSON。基本上他提供了2個選項:數據中的有效JSON或數據中的有效字符串。上面的解決方案解決了確切的問題...有道理? – istos 2014-10-28 00:07:25

+0

如果他有'「{該cookie是謊言。}」'? – 2014-10-28 00:08:16