jQuery parseJSON

时间:2011-08-23 21:34:44

标签: jquery json parsing escaping character

当我尝试解析经过JSON验证的字符串时,收到此错误(“JSON.parse:意外字符”)。当我删除需要转义的字符时,它完美地工作(style =“width:400px;”)。我错过了什么?在使用parseJSON之前是否有一种转义字符的独特方法?

var $cookieString = '{"youTabItems": { "youTab-001": <p style=\"width:400px;\">Welcome to my test</p>, "youTab-002": "test02Value", "youTab-003": "test03Value" }}';

var $myCookieString = $.parseJSON($cookieString);

logThis($myCookieString);

更新

我能够让大部分工作正常,直到我开始保存/从Cookie中检索。现在,它在分号后切断了内容......对此有何想法?我在quirsmode.com上使用了3个函数来获取cookie功能(如下所示)。

        function setCookie(name, value, days) { var date, expires; if (days) { date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toGMTString(); } else { expires = ""; } document.cookie = name + "=" + value + expires + "; path=/"; }
        function getCookie(name) { var nameEQ = name + "=", ca = document.cookie.split(';'), c, i; for (i = 0; i < ca.length; i++) { c = ca[i]; while (c.charAt(0) === ' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) === 0) { return c.substring(nameEQ.length, c.length); } } return null; }
        function eraseCookie(name) { setCookie(name, "", -1); }

        var cookieObject = {"youTabItems": { "youTab-001": "<p style=\"width:400px;\">Welcome to my test</p>", "youTab-002": "test02Value", "youTab-003": "test03Value" }};
        var cookieString = JSON.stringify($cookieVal);
        setCookie('youTabItems', cookieString, 28);

3 个答案:

答案 0 :(得分:6)

var $cookieString = '{"youTabItems": { "youTab-001": "<p style=\\"width:400px;\\">Welcome to my test</p>", "youTab-002": "test02Value", "youTab-003": "test03Value" }}';

var $myCookieString = $.parseJSON($cookieString);

将html包装为字符串以使JSON有效。

为什么要双斜线?

blackslash是JavaScript字符串中的转义字符。这意味着我们必须将其自身转义为创建文字黑名单。我们需要一个字面反斜杠作为JSON中的转义字符。

示例:

var json = '{"foo": "\\""}';

将创建字符串

{"foo": "\""}

这是有效的JSON。如果我们只有一个反斜杠,它会创建

{"foo": """}

无效。

注意:这只是因为您的JSON在JavaScript字符串中。如果您提供服务,例如作为HTTP响应,您只需要一个反斜杠。但是,无论您使用什么来创建JSON都会自动转义引号,因此您不必处理它。

<强>更新

将数据存储在cookie中的更好方法是:

var cookieObject = {"youTabItems": { "youTab-001": "<p style=\"width:400px;\">Welcome to my test</p>", "youTab-002": "test02Value", "youTab-003": "test03Value" }};
var cookieString = JSON.stringify(cookieObject);

答案 1 :(得分:0)

第一项未包含在引号中:

"youTab-001": "<pstyle=\"width: 400px;\">Welcometomytest</p>",

答案 2 :(得分:0)

<p style=\"width:400px;\">Welcome to my test</p>

是字符串值吗?然后必须引用