2 Stimmen

jQuery parseJSON

Ich erhalte diese Fehlermeldung ("JSON.parse: unexpected character"), wenn ich versuche, eine JSON-validierte Zeichenfolge zu analysieren. Es funktioniert perfekt, wenn ich die Zeichen entfernen, die escaped werden müssen (style="width:400px;"). Was übersehe ich? Gibt es eine eindeutige Möglichkeit, Zeichen zu entschlüsseln, bevor Sie parseJSON verwenden?

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);

Update

Ich konnte das meiste davon zum Laufen bringen, bis ich mit dem Speichern/Abrufen von Cookies begann. Im Moment schneidet es den Inhalt nach dem Semikolon ab... fällt Ihnen dazu etwas ein? Ich verwende 3 Funktionen, die ich auf quirsmode.com für die Cookie-Funktionalität gefunden habe (siehe unten).

        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);

6voto

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

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

Verpacken Sie Ihr html als String, um das JSON gültig zu machen.

Warum doppelte Schrägstriche?

Der Blackslash ist das Escape-Zeichen in JavaScript-Strings. Das bedeutet, dass wir es selbst entschlüsseln müssen, um eine wörtlich blackslash. Und wir brauchen einen buchstäblichen Backslash als Escape-Zeichen im JSON.

Ejemplo:

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

wird die Zeichenkette

{"foo": "\""}

was gültiges JSON ist. Wenn wir nur einen Backslash hätten, würde es

{"foo": """}

die nicht gültig ist.

Hinweis: Dies ist nur erforderlich, weil Ihr JSON innerhalb einer JavaScript-Zeichenkette liegt. Wenn Sie es z. B. als HTTP-Antwort ausgeben, brauchen Sie nur einen Backslash. Aber was auch immer Sie verwenden, um das JSON zu erstellen, escape die Anführungszeichen automatisch, so sollten Sie nicht mit, dass zu behandeln.

Update

Eine bessere Methode, die Daten in einem Cookie zu speichern, wäre:

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);

0voto

Mrchief Punkte 72978

Der erste Eintrag ist nicht in Anführungszeichen gesetzt:

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

0voto

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

handelt es sich um eine Zeichenkette? dann muss sie in Anführungszeichen gesetzt werden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X