Según el diagrama de máquina de estado en el sitio web de JSON , solo se permiten caracteres de comillas dobles escapadas, no comillas simples. Los caracteres de comillas simples no necesitan escapar:
Actualización : más información para los interesados:
Douglas Crockford no dice específicamente por qué la especificación JSON no permite comillas simples escapadas dentro de cadenas. Sin embargo, durante su discusión sobre JSON en el Apéndice E de JavaScript: The Good Parts , escribe:
Los objetivos de diseño de JSON eran ser mínimos, portátiles, textuales y un subconjunto de JavaScript. Cuanto menos necesitemos acordar para interoperar, más fácilmente podremos interoperar.
Entonces, tal vez decidió permitir que las cadenas se definan utilizando comillas dobles, ya que esta es una regla menos en la que todas las implementaciones de JSON deben estar de acuerdo. Como resultado, es imposible que un carácter de comillas simples dentro de una cadena termine accidentalmente la cadena, porque, por definición, una cadena solo puede terminarse con un carácter de comillas dobles. Por lo tanto, no es necesario permitir el escape de un carácter de comilla simple en la especificación formal.
Cavar un poco más profundo, Crockford
org.json implementación de JSON para Java es más permisible y
lo hace permitir caracteres de comillas simples:
Los textos producidos por los métodos toString se ajustan estrictamente a las reglas de sintaxis JSON. Los constructores son más indulgentes en los textos que aceptarán:
...
- Las cadenas se pueden citar con '(comilla simple).
Esto lo confirma el código fuente de JSONTokener . El nextString
método acepta caracteres de comillas simples escapadas y los trata como caracteres de comillas dobles:
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;
...
En la parte superior del método hay un comentario informativo:
El formato JSON formal no permite cadenas en comillas simples, pero una implementación puede aceptarlas.
Por lo tanto, algunas implementaciones aceptarán comillas simples, pero no debe confiar en esto. Muchas implementaciones populares son bastante restrictivas a este respecto y rechazarán JSON que contiene cadenas entre comillas simples y / o comillas simples escapadas.
Finalmente, para vincular esto con la pregunta original, jQuery.parseJSON
primero intenta usar el analizador JSON nativo del navegador o una biblioteca cargada como json2.js cuando corresponda (que en una nota al margen es la biblioteca en la que se basa la lógica jQuery si JSON
no está definida) . Por lo tanto, jQuery solo puede ser tan permisivo como esa implementación subyacente:
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 );
},
Hasta donde sé, estas implementaciones solo se adhieren a la especificación JSON oficial y no aceptan comillas simples, por lo tanto, jQuery tampoco.