561 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?

765voto

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

75voto

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.

27voto

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"}

22voto

matt0089 Punkte 91

Tl;dr

Wenn Sie sich im inneren JavaScript/Python/etc. befinden, verwenden Sie Raw-Strings (python's r'' oder JavaScript's String.raw oder ähnliches). Damit wird es viel einfacher, JSON-Strings zu schreiben, da mehrfache Escape-Sequenz-Verarbeitungen vermieden werden.

console.log(JSON.parse(String.raw`"This is a double quote >> \" <<"`))
// => This is a double quote >> " <<

Weiterführende Informationen

Einige Verwirrung beim Schreiben von JSON-Strings im Code entsteht durch die mehrfache Verarbeitung von Zeichenketten-Escape-Sequenzen. Einmal in der Programmiersprache, erneut im JSON-Parser (z. B. JSON.parse() in JavaScript oder ähnliches).

Verwenden Sie die Druckfunktion der Sprache, um zu sehen, welche Escapes in der Programmiersprache passieren

Es kann verwirrend sein, wie Zeichenketten in einer Programmiersprach-Replikation angezeigt werden.

Beispielsweise, wenn Sie eine Zeichenkette direkt in eine JavaScript-Replikation eingeben, wird sie so angezeigt

'Zwei Zeilenumbrüche:\n\nTab hier >>\t<<\n\nBackslash hier >>\\<<'
// => 'Zwei Zeilenumbrüche:\n\nTab hier >>\t<<\n\nBackslash hier >>\\<<'

Aber wenn Sie die Zeichenkette console.log(), wird sie so angezeigt

console.log('Zwei Zeilenumbrüche:\n\nTab hier >>\t<<\n\nBackslash hier >>\\<<')
/* =>
Zwei Zeilenumbrüche:

Tab hier >> <<

Backslash hier >>\<<
*/

Wenn JavaScript auf eine Zeichenkette trifft, 'bewertet' es die Escape-Sequenzen, bevor es sie z. B. an eine Funktion übergibt, im Sinne dass es jedes \n durch ein Zeilenumbruchszeichen, jedes \t durch ein Tab-Zeichen usw. ersetzt.

Also hilft es sehr, die Zeichenkette mit console.log() zu überprüfen, um eine bessere Vorstellung davon zu bekommen, was passiert.

Wie man einfaches Anführungszeichen in JSON in JavaScript kodiert

Um in JavaScript eine " in JSON zu schreiben, könnten Sie

console.log(JSON.parse('"This is a double quote >> \\" <<"'));
// => This is a double quote >> " <<

Es wäre ähnlich in Python und anderen Sprachen.

Schritt für Schritt:

  1. JavaScript bewertet die Zeichenkette unter Verwendung der Escape-Sequenz-Regeln aus der JavaScript-Spezifikation, ersetzt \n durch ein Zeilenumbruchszeichen, \t durch ein Tab-Zeichen usw.
    • In unserem Fall ersetzt es \\ durch \.
    • Die Ergebniszeichenfolge ist "This is a double quote >> \" <<"
    • Wir setzen die äußeren doppelten Anführungszeichen, um daraus eine gültige JSON-Zeichenfolge zu machen
  2. JavaScript nimmt das Ergebnis und übergibt es der JSON.parse() fn.
  3. JSON.parse bewertet die Zeichenkette unter Verwendung der Escape-Sequenz-Regeln aus dem JSON-Standard, ersetzt \n durch ein Zeilenumbruchszeichen, \t durch ein Tab-Zeichen usw. In unserem Fall,
    • das erste Zeichen, das es sieht, ist ", also weiß es, dass dies eine JSON-Zeichenkette ist.
    • In der JSON-Zeichenkette sieht es \". Normalerweise würde " das Ende der JSON-Zeichenkette markieren, aber da " mit \ escapet ist, weiß es, dass dies nicht das Ende der Zeichenkette ist und ersetzt \" durch ein wörtliches doppeltes Anführungszeichen.
    • das letzte Zeichen, das es sieht, ist ", also weiß es, dass dies das Ende der JSON-Zeichenkette ist
    • Die analysierte Ergebniszeichenfolge ist Das ist ein doppeltes Anführungszeichen >> " <<. Beachten Sie, dass auch die äußeren doppelten Anführungszeichen verschwunden sind.

Raw-Strings machen es einfacher

Die Raw-String-Vorlagenfunktion von JavaScript String.raw und die Raw-Strings von Python r'' evaluieren keine Escape-Sequenzen, was es viel einfacher und weniger verwirrend macht, darüber nachzudenken

console.log(JSON.parse(String.raw`"Das ist ein doppeltes Anführungszeichen >> \" <<"`))
// => This is a double quote >> " <<

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.

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