Aqui esta mi cuerda
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
Aquí el mensaje contiene comillas simples, que es igual a la cita utilizada en JSON. Lo que hago es llenar una cadena de entradas de usuario como mensaje. Entonces, necesito escapar de ese tipo de escenarios especiales que rompen el código. Pero, aparte del reemplazo de cadena, ¿hay alguna forma de hacer que escapen, pero aún así permitir que HTML los procese de nuevo al mensaje correcto?
Respuestas:
Una cadena JSON debe estar entre comillas dobles, de acuerdo con las especificaciones , por lo que no necesita escapar
'
.Si tiene que usar caracteres especiales en su cadena JSON, puede escapar usando
\
caracteres.Vea esta lista de caracteres especiales utilizados en JSON:
Sin embargo, incluso si es totalmente contrario a las especificaciones, el autor podría usar
\'
.Esto es malo porque:
Pero funciona, como quieras o no.
Para los nuevos lectores, use siempre comillas dobles para sus cadenas json.
fuente
JSON.parse("'foo'")
en la consola de su navegador, por ejemplo, y observe elSyntaxError: Unexpected token '
. La especificación JSON es realmente simple y clara sobre esto. No hay una secuencia de escape en JSON para comillas simples, y una cadena JSON no puede ser comilla simple.'
, de la misma manera que es técnicamente cierto pero engañoso decir que legalmente no es necesario asesinar niños. Más correcto sería decir que no puedes escapar'
.\'
es una secuencia de escape ilegal, y si la usa, su JSON no es JSON válido y cualquier analizador JSON se ahogará. (Ciertamente, JavaScriptJSON.parse
y Pythonjson.loads
hacen.)\'
secuencia de escape "funciona, como quiera o no" . Esto es falso Le desafío a que exhiba cualquier analizador JSON de uso popular que no se ahogue en cadenas de comillas simples o en la\'
secuencia. Ya he señalado queJSON.parse("'foo'")
yJSON.parse('"\\\'"')
(en JavaScript) yjson.loads("'foo'")
yjson.loads('"\\\'"')
(en Python) lanzan excepciones. ¿Cuál es su base para la afirmación de que el uso de estas construcciones "funciona"?'
como\u0027
, no es que puedas escapar como\'
.'
" (¡y comparar tal acto con el asesinato de niños!) Es técnicamente incorrecto; más exacto es decir que puedes escapar de él, solo que no\'
. No me había dado cuenta de que la versión RFC de la especificación se refería a secuencias\u0027
como una forma de 'escapar' de los personajes que representan. Sin\'
embargo, el punto clave que es ilegal sigue siendo cierto e importante.Estoy horrorizado por la presencia de información errónea muy votada sobre una pregunta tan altamente vista sobre un tema básico.
Las cadenas JSON no se pueden citar con comillas simples . Las diversas versiones de la especificación ( el original de Douglas Crockford, la versión ECMA y la versión IETF ) establecen que las cadenas deben ser citadas con comillas dobles. Este no es un tema teórico, ni una cuestión de opinión como sugiere actualmente la respuesta aceptada; cualquier analizador JSON en el mundo real generará un error si intenta que analice una cadena entre comillas simples.
La versión de Crockford y ECMA incluso muestra la definición de una cadena usando una imagen bonita, lo que debería dejar el punto claramente claro:
La imagen bonita también enumera todas las secuencias de escape legítimas dentro de una cadena JSON:
\"
\\
\/
\b
\f
\n
\r
\t
\u
seguido de cuatro dígitos hexadecimalesTenga en cuenta que, al contrario de las tonterías en algunas otras respuestas aquí,
\'
nunca es una secuencia de escape válida en una cadena JSON. No es necesario que sea así, porque las cadenas JSON siempre tienen comillas dobles.Finalmente, normalmente no debería pensar en escapar de los caracteres usted mismo cuando genera JSON mediante programación (aunque, por supuesto, lo hará cuando edite manualmente, por ejemplo, un archivo de configuración basado en JSON). En su lugar, forme la estructura de datos que desea codificar utilizando cualquier mapa nativo, matriz, cadena, número, tipo booleano y nulo que tenga su idioma, y luego codifíquelo en JSON con una función de codificación JSON. Tal función probablemente esté integrada en el lenguaje que esté utilizando, como JavaScript
JSON.stringify
, PHPjson_encode
o Python.json.dumps
. Si está utilizando un lenguaje que no tiene dicha funcionalidad incorporada, probablemente pueda encontrar una biblioteca de codificación y análisis JSON para usar. Si simplemente usa las funciones de lenguaje o biblioteca para convertir cosas hacia y desde JSON, nunca necesitará saber las reglas de escape de JSON. Esto es lo que el preguntante equivocado aquí debería haber hecho.fuente
Todos hablan de cómo escapar
'
en un'
literal de cadena entre comillas. Aquí hay un problema mucho mayor: los literales de cadena entre comillas simples no son JSON válidos . JSON se basa en JavaScript, pero no es lo mismo. Si está escribiendo un objeto literal dentro del código JavaScript, está bien; si realmente necesita JSON, debe usarlo"
.Con cadenas entre comillas dobles, no necesitará escapar del
'
. (Y si quisieras un literal"
en la cadena, lo usarías\"
).fuente
'
. Por ejemplo, si mi valor de cadena es"Member's_id" : 4
, ¿estás diciendo que no necesita escapar? Aparentemente estoy teniendo un problema donde está dando un error de codificación incorrecta: UTF-8 y se está leyendo comoMember�s
. Es un archivo json generado manualmente.'
en un literal de cadena JSON no se debe escapar. ¿Lo copiaste y lo pegaste en alguna parte? Quizás sea realmente\u2019
un apóstrofe, no un apóstrofe. Mi suposición: alguien lo escribió en MS Word, lo que lo convirtió en una comilla porque cree que lo sabe mejor. Gramaticalmente, el viejo apóstrofe de caracteres ASCII (es decir'
, al\x27
que hemos estado llamando "comillas simples" hasta ahora) es el que desea. Pero aún así sería bueno solucionar el problema de codificación de caracteres, en caso de que haya otros problemas similares. Elija una codificación de caracteres y úsela tanto para lecturas como para escrituras. O escapar usando\u
.La mayoría de estas respuestas no responden la pregunta o son innecesariamente largas en la explicación.
OK, entonces JSON solo usa comillas dobles, ¡lo entendemos!
Estaba tratando de usar JQuery AJAX para publicar datos JSON en el servidor y luego devolver esa misma información. La mejor solución a la pregunta publicada que encontré fue usar:
Esto escapará de los personajes por ti.
Esto también fue sugerido por Mark Amery, Gran respuesta por cierto
Espero que esto ayude a alguien.
fuente
Puede ser que sea demasiado tarde para la fiesta, pero esto analizará / escapará la comilla simple (no quiero entrar en una batalla en analizar vs escapar).
fuente
La respuesta a la pregunta directa:
para estar seguro, reemplace el carácter requerido con \ u + valor de 4 dígitos hexadecimal
Ejemplo: si desea escapar del apóstrofe 'reemplace con \ u0027
D'Amico se convierte en D \ u0027Amico
BONITA REFERENCIA: http://es5.github.io/x7.html#x7.8.4
https://mathiasbynens.be/notes/javascript-escapes
fuente
\'
.Use encodeURIComponent () para codificar la cadena.
P.ej. var product_list = encodeURIComponent (JSON.stringify (product_list));
No necesita decodificarlo, ya que el servidor web automáticamente hace lo mismo.
fuente
Usar literales de plantilla ...
fuente
Creo que todos estamos de acuerdo en que los jsons entre comillas simples no son jsons reales. Sea como fuere, todavía tenemos que abordar la cuestión de escapar "dentro de una cadena json con comillas dobles, en ausencia de bibliotecas que lo hagan por nosotros.
Reemplazar cada "con un \" NO ES SUFICIENTE: el usuario puede ingresar la entrada: \ y el análisis, nuevamente, falla (piense por qué).
En su lugar, primero reemplace cada \ con \ (barra diagonal inversa doble). Solo entonces, reemplace cada "con \" (barra invertida seguida de ").
fuente
Para permitir comillas simples dentro de la cadena de comillas doble para el propósito de json, duplique la comilla simple. {"X": "¿Cuál es la pregunta"} ==> {"X": "¿Cuál es la pregunta"}
/codereview/69266/json-conversion-to-single-quotes
La secuencia \ 'no es válida.
fuente
con respecto a la publicación de AlexB:
escapar de comillas simples solo es válido en cadenas json entre comillas simples
escape de comillas dobles solo es válido en cadenas json con comillas dobles
ejemplo:
fuente