jQuery parseJSON

Mar*_*855 2 jquery parsing json 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);
Run Code Online (Sandbox Code Playgroud)

更新

我能够让它的大部分工作,直到我开始从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);
Run Code Online (Sandbox Code Playgroud)

Gaz*_*ler 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);
Run Code Online (Sandbox Code Playgroud)

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

为什么双斜线?

blackslash是JavaScript字符串中的转义字符.这意味着我们必须逃避它自己创建一个字面的黑色斜杠.我们需要一个字面反斜杠作为JSON中的转义字符.

例:

var json = '{"foo": "\\""}';
Run Code Online (Sandbox Code Playgroud)

将创建字符串

{"foo": "\""}
Run Code Online (Sandbox Code Playgroud)

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

{"foo": """}
Run Code Online (Sandbox Code Playgroud)

这是无效的.

注意:这只是因为您的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);
Run Code Online (Sandbox Code Playgroud)

  • 这得看情况.如果您实际上是直接在JavaScript中创建JSON文本,那么您将需要它,否则解析器将看到```作为关闭该值.http://jsfiddle.net/vSwWg/ (2认同)
  • 但话说回来,我不确定为什么你要在JavaScript中创建一个JSON格式的字符串,这样你才能将它解析成JavaScript对象.为什么不首先使用文字? (2认同)