JQuery ParseJSON - PullRequest
       16

JQuery ParseJSON

2 голосов
/ 24 августа 2011

Получение этой ошибки («JSON.parse: неожиданный символ») при попытке проанализировать проверенную строку JSON. Он отлично работает, когда я удаляю символы, которые нужно экранировать (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. Прямо сейчас, его обрезка содержимого после точки с запятой ... есть мысли по этому поводу? Я использую 3 функции, которые я нашел на quirsmode.com для функциональности файлов 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 ]

6 голосов
/ 24 августа 2011
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 действительным.

Почему двойная косая черта?

Черная черта - это escape-символ в строках JavaScript.Это означает, что нам нужно избежать самого себя, чтобы создать литерал черный слэш.И нам нужен буквальный обратный слеш в качестве escape-символа в JSON.

Пример:

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

создаст строку

{"foo": "\""}

, которая является допустимым JSON.Если бы у нас была только одна обратная косая черта, это создало бы

{"foo": """}

, что недопустимо.

Примечание: Это необходимо только потому, что ваш JSON находится внутри строки JavaScript,Если вы используете его, например, как HTTP-ответ, вам нужен только один обратный слеш.Но все, что вы используете для создания JSON, автоматически будет экранировать кавычки, поэтому вам не придется с этим сталкиваться.

Обновление

Лучший способ хранения данныхв печенье будет:

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);
0 голосов
/ 24 августа 2011
<p style=\"width:400px;\">Welcome to my test</p>

это строковое значение? тогда это должно быть указано

0 голосов
/ 24 августа 2011

Первый элемент не заключен в кавычки:

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