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:
- 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
- JavaScript nimmt das Ergebnis und übergibt es der JSON.parse() fn.
- 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 >> " <<