Tengo que formar una cadena JSON en la que un valor tenga un nuevo carácter de línea. Esto tiene que ser escapado y luego publicado usando la llamada AJAX. ¿Alguien puede sugerir una forma de escapar de la cadena con JavaScript? No estoy usando jQuery.
javascript
escaping
Srikant
fuente
fuente
Respuestas:
Toma tu JSON y
.stringify()
eso. Luego use el.replace()
método y reemplace todas las apariciones de\n
con\\n
.EDITAR:
Hasta donde yo sé, no hay bibliotecas JS conocidas para escapar de todos los caracteres especiales en una cadena. Pero, podría encadenar el
.replace()
método y reemplazar todos los caracteres especiales como este:Pero eso es bastante desagradable, ¿no? Ingrese la belleza de las funciones, ya que le permiten dividir el código en pedazos y mantener el flujo principal de su script limpio y libre de 8
.replace()
llamadas encadenadas . Pongamos esa funcionalidad en una función llamadaescapeSpecialChars()
,. Vamos a seguir adelante y adjuntarlo a laprototype chain
delString
objeto, por lo que podemos llamarescapeSpecialChars()
directamente sobre los objetos de cadena.Al igual que:
Una vez que hemos definido esa función, el cuerpo principal de nuestro código es tan simple como esto:
fuente
Según el usuario 667073 sugerido, excepto reordenar el reemplazo de la barra diagonal inversa primero y arreglar el reemplazo de la cotización
fuente
Line separator
\u2028
yParagraph separator
\u2029
. Ref: es5.github.io/#x7.3Uncaught SyntaxError: Unexpected token \ in JSON at position 2
Al igual que usted, he estado buscando varios comentarios y publicaciones para reemplazar los caracteres de escape especiales en mi JSON que contiene objetos HTML dentro de eso.
Mi objetivo es eliminar los caracteres especiales en el objeto JSON y también renderizar el html que está dentro del objeto json.
Esto es lo que hice y espero que sea muy fácil de usar.
Primero hice JSON.stringify mi objeto json y JSON.parse el resultado.
Por ejemplo:
Y resuelve mi problema y termina usando Pure Javascript.
fuente
stackoverflow
errorJSON.parse(JSON.stringify($("body")))
en un archivo html con body y algunas tablas. $ ("body") es un objeto javascript pero stringify fallará al analizarlo.Me temo decir que la respuesta dada por Alex es bastante incorrecta, por decirlo suavemente:
Esta función
Parece ser una mejor aproximación.
fuente
Una pequeña actualización para comillas simples
fuente
Esta es una publicación vieja. pero aún puede ser útil para aquellos que usan angular.fromJson y JSON.stringify. escape () está en desuso. use esto en su lugar,
ref http://www.w3schools.com/jsref/jsref_decodeuricomponent.asp
fuente
También hay un segundo parámetro en JSON.stringify. Entonces, la solución más elegante sería:
fuente
Esta es una vieja pregunta, pero la solución no funcionó bien para mí, ya que no resolvió todos los casos. Finalmente encontré una respuesta que hizo el trabajo aquí
Publicaré mi solución combinada de ambos usando escape y codificar componente uri:
fuente
escape = (string) -> JSON.stringify(string)[1...-1]
Es mejor usar
JSON.parse(yourUnescapedJson);
fuente
Use json_encode () si su idioma de scripting del lado del servidor es PHP,
json_encode()
escapa de la nueva línea y otros tokens inesperados por usted (si no usa PHP, busque una función similar para su lenguaje de scripting)a continuación, utilizar
$.parseJSON()
en su JavaScript, hecho!fuente
<script> windows.data_from_php = <?php echo json_encode(json_encode($arrayOrObjToJs)); ?>; var phpData = JSON.parse(windows.data_from_php); </script>
php JSON.parse doble codificaciónTuve la misma situación en una de mis llamadas de Ajax, donde
JSON
estaba arrojando un error debido a la nueva línea en el campo Textarea. La solución dada aquí no funcionó para mí. Así que usé la.escape
función de Javascript y funcionó bien. Luego, para recuperar el valorJSON
, simplemente escapé usando.unescape
.fuente
I utilizado el construido en jQuery.serialize () para extraer el valor de un área de texto a urlencode la entrada. La parte profesional es que no tiene que buscar reemplazar cada carácter especial por su cuenta y también mantengo las nuevas líneas y escapa html. Para que la serialización funcione, parece que el campo de entrada debe tener un atributo de nombre y también agrega el mismo atributo a la cadena escapada que debe reemplazarse. Puede que no sea lo que estás buscando, pero funciona para mí.
fuente
Cuando se utiliza cualquier forma de Ajax, la documentación detallada para el formato de las respuestas recibidas del servidor CGI parece faltar en la Web. Algunas entradas aquí señalan que las nuevas líneas en el texto devuelto o en los datos json deben escaparse para evitar bucles infinitos (bloqueos) en la conversión JSON (posiblemente creada al lanzar una excepción no detectada), ya sea que se realice automáticamente mediante jQuery o manualmente usando el sistema Javascript o el análisis JSON de la biblioteca llamadas.
En cada caso donde los programadores publican este problema, se presentan soluciones inadecuadas (la mayoría de las veces reemplazando \ n por \\ n en el lado de envío) y el asunto se descarta. Su insuficiencia se revela al pasar valores de cadena que incrustan accidentalmente secuencias de escape de control, como nombres de ruta de Windows. Un ejemplo es "C: \ Chris \ Roberts.php", que contiene los caracteres de control ^ c y ^ r, que pueden provocar la conversión JSON de la cadena {"archivo": "C: \ Chris \ Roberts.php"} a bucle para siempre. Una forma de generar tales valores es deliberadamente intentar pasar mensajes de advertencia y error de PHP del servidor al cliente, una idea razonable.
Por definición, Ajax usa conexiones HTTP detrás de escena. Dichas conexiones pasan datos utilizando GET y POST, los cuales requieren codificar los datos enviados para evitar una sintaxis incorrecta, incluidos los caracteres de control.
Esto da una pista suficiente para construir lo que parece ser una solución (necesita más pruebas): usar el código rawurlen en el lado PHP (envío) para codificar los datos y no escapar en el lado Javascript (recepción) para decodificar los datos. En algunos casos, los aplicará a cadenas de texto completas, en otros casos los aplicará solo a valores dentro de JSON.
Si esta idea resulta ser correcta, se pueden construir ejemplos simples para ayudar a los programadores en todos los niveles a resolver este problema de una vez por todas.
fuente
Parece que esta es una publicación antigua realmente :-) Pero chicos, la mejor solución que tengo para esto, para ser 100% que funciona sin código complicado, es usar ambas funciones de codificación / decodificación a base64. Estos son atob () y btoa (). Con mucho, la forma más fácil y mejor, no hay que preocuparse si se perdió algún personaje para escapar.
Jorge
fuente
Si sus Google continúan aterrizando aquí y su api arroja errores a menos
"{\"foo\": true}"
que se escapen sus comillas dobles JSON ( ), todo lo que necesita hacer es stringificar dos veces, por ejemploJSON.stringify(JSON.stringify(bar))
fuente
Use encodeURIComponent () para codificar la cadena.
P.ej. var myEscapedJSONString = encodeURIComponent (JSON.stringify (myJSON));
No necesita decodificarlo, ya que el servidor web automáticamente hace lo mismo.
fuente
Nunca use expresiones regulares (quiero decir, nunca como nunca). La mejor y más efectiva forma:
fuente