Gemäß dem Zustandsmaschinendiagramm auf der JSON-Website sind nur maskierte doppelte Anführungszeichen zulässig, keine einfachen Anführungszeichen. Einfache Anführungszeichen müssen nicht maskiert werden:
Update - Weitere Informationen für Interessierte:
Douglas Crockford gibt nicht ausdrücklich an, warum die JSON-Spezifikation keine maskierten einfachen Anführungszeichen innerhalb von Zeichenfolgen zulässt. Während seiner Diskussion über JSON in Anhang E von JavaScript: The Good Parts schreibt er jedoch:
Die Designziele von JSON waren minimal, portabel, textuell und eine Teilmenge von JavaScript. Je weniger wir uns einigen müssen, um zusammenarbeiten zu können, desto leichter können wir zusammenarbeiten.
Vielleicht hat er beschlossen, Zeichenfolgen nur mit doppelten Anführungszeichen zu definieren, da dies eine Regel weniger ist, auf die sich alle JSON-Implementierungen einigen müssen. Infolgedessen kann ein einfaches Anführungszeichen innerhalb einer Zeichenfolge die Zeichenfolge nicht versehentlich beenden, da eine Zeichenfolge per Definition nur durch ein Zeichen in doppelten Anführungszeichen abgeschlossen werden kann. Daher ist es nicht erforderlich, das Entkommen eines einzelnen Anführungszeichens in der formalen Spezifikation zuzulassen.
Graben ein wenig tiefer, Crockford
org.json ist Implementierung von JSON für Java mehr zulässig und
tut Apostrophe ermöglichen:
Die von den toString-Methoden erstellten Texte entsprechen streng den JSON-Syntaxregeln. Die Konstrukteure sind in den Texten, die sie akzeptieren, verzeihender:
...
- Zeichenfolgen können mit '(einfaches Anführungszeichen) zitiert werden.
Dies wird durch den JSONTokener- Quellcode bestätigt. Die nextString
Methode akzeptiert maskierte einfache Anführungszeichen und behandelt sie wie doppelte Anführungszeichen:
public String nextString(char quote) throws JSONException {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
switch (c) {
...
case '\\':
c = this.next();
switch (c) {
...
case '"':
case '\'':
case '\\':
case '/':
sb.append(c);
break;
...
Am Anfang der Methode steht ein informativer Kommentar:
Das formale JSON-Format erlaubt keine Zeichenfolgen in einfachen Anführungszeichen, aber eine Implementierung kann sie akzeptieren.
Einige Implementierungen akzeptieren also einfache Anführungszeichen - aber Sie sollten sich nicht darauf verlassen. Viele gängige Implementierungen sind in dieser Hinsicht recht restriktiv und lehnen JSON ab, das Zeichenfolgen in einfachen Anführungszeichen und / oder einfache Anführungszeichen enthält.
Um dies mit der ursprünglichen Frage jQuery.parseJSON
zu verknüpfen , versuchen Sie zunächst, den nativen JSON-Parser des Browsers oder gegebenenfalls eine geladene Bibliothek wie json2.js zu verwenden (auf einer Randnotiz steht die Bibliothek, auf der die jQuery-Logik basiert, wenn sie JSON
nicht definiert ist). . Daher kann jQuery nur so tolerant sein wie die zugrunde liegende Implementierung:
parseJSON: function( data ) {
...
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
...
jQuery.error( "Invalid JSON: " + data );
},
Soweit ich weiß, entsprechen diese Implementierungen nur der offiziellen JSON-Spezifikation und akzeptieren keine einfachen Anführungszeichen, daher auch nicht jQuery.