497 Stimmen

Wie man doppelte Anführungszeichen in JSON escapen

Ich versuche, doppelte Anführungszeichen anzuzeigen, aber es zeigt eine der Backslashes:

"maingame": {
    "day1": {
        "text1": "Tag 1",
        "text2": "Heute startet unsere Rundreise \\\"Beispieltext\\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir. "
    }
}

Beim Rendern im HTML wird es als \"Beispieltext\" angezeigt. Was ist der richtige Weg?

686voto

kamituel Punkte 33200

Versuchen Sie dies:

"maingame": {
  "day1": {
    "text1": "Tag 1",
     "text2": "Heute startet unsere Rundreise \" Beispieltext \". Jeden Tag wird ein neues Reiseziel angesteuert bis wir. "
  }
}

(nur ein Backslash (\) vor Anführungszeichen).

67voto

Gregor y Punkte 1366

Wann und wo man \\\" verwenden sollte. OK, wenn du wie ich bist, wirst du dich genauso albern fühlen wie ich, als ich realisierte, was ich tat, nachdem ich diesen Thread gefunden hatte.

Wenn Sie eine .json-Textdatei/-stream erstellen und die Daten von dort importieren, dann ist die Hauptantwort von nur einem Backslash vor den doppelten Anführungszeichen: \" die, die Sie suchen.

Wenn Sie jedoch wie ich sind und versuchen, den "Tryit Editor" von w3schools.com dazu zu bringen, doppelte Anführungszeichen im Ausgabewert von JSON.parse(text) zu haben, dann ist das, was Sie suchen, die dreifachen Backslashes der doppelten Anführungszeichen \\\". Dies liegt daran, dass Sie Ihren Textstring innerhalb eines HTML-</code>-Blocks erstellen, und der erste doppelte Backslash einen einzelnen Backslash in die Zeichenfolgenvariable einfügt, dann der folgende Backslash doppelte Quote das doppelte Anführungszeichen in die Zeichenfolge einfügt, so dass die resultierende Skriptzeichenfolge das <code>\"</code> von der Standardantwort enthält und der JSON-Parser dies nur als doppelte Anführungszeichen analysieren wird.</p> <pre><code><script> var text="{"; text += '"quip":"\\\"If nobody is listening, then you\'re likely talking to the wrong audience.\\\""'; text += "}"; var obj=JSON.parse(text);

+1: Da es sich um einen JavaScript-Textstring handelt, würde auch ein doppelter Backslash doppelt Anführungszeichen \\" funktionieren; da das doppelte Anführungszeichen in einer einfachen Zeichenfolge nicht maskiert werden muss, z.B. '\"' und '"' führen zu derselben JS-Zeichenfolge.

22voto

manas Punkte 5423

Wenn Sie ein doppeltes Anführungszeichen in JSON escapen möchten, verwenden Sie \\, um es zu escapen.

Beispiel, wenn Sie JSON für das folgende JavaScript-Objekt erstellen möchten

{time: '7 "o" clock'}

dann müssen Sie es folgendermaßen schreiben

'{"time":"7 \\"o\\" clock"}'

Wenn wir es mit JSON.parse() parsen

JSON.parse('{"time":"7 \\"o\\" clock"}')

Das Ergebnis wird sein

{time: "7 "o" clock"}

20voto

Alex Worden Punkte 3334

Es zeigt den Backslash, weil du auch den Backslash escapst.

Abgesehen von doppelten Anführungszeichen musst du auch Backslashes escapen, wenn du einen in deinem JSON-Quotenstring verwenden möchtest. Wenn du jedoch vorhast, einen Backslash in einer Escape-Sequenz zu verwenden, solltest du ihn natürlich nicht escapen.

12voto

Ben Punkte 121

Beachten Sie, dass dies in der Regel auftritt, wenn der Inhalt "doppelt codiert" wurde, was bedeutet, dass der Kodierungsalgorithmus versehentlich zweimal aufgerufen wurde.

Der erste Aufruf würde den Wert "text2" kodieren:

VON: Heute startet unsere Rundreise "Beispiel Text". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

NACH: Heute startet unsere Rundreise \"Beispiel Text\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

Bei einer zweiten Kodierung wird es erneut konvertiert und die bereits escapten Zeichen werden erneut escapet:

VON: Heute startet unsere Rundreise \"Beispiel Text\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

NACH: Heute startet unsere Rundreise \\\\\"Beispiel Text\\\\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

Also, wenn Sie für die Implementierung des Servers verantwortlich sind, überprüfen Sie, ob nicht zwei Schritte versuchen, den gleichen Inhalt zu kodieren.

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