Cómo escapar de las comillas dobles en JSON


Estoy tratando de mostrar comillas dobles pero muestra una de las barras invertidas:

"maingame": {
    "day1": {
        "text1": "Tag 1",
        "text2": "Heute startet unsere Rundreise \\\"Example text\\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
    }
}

Al renderizar en el html se muestra como \"Example text\". ¿Cuál es el camino correcto?

 235
Author: Cœur, 2013-03-26

6 answers

Prueba esto:

"maingame": {
  "day1": {
    "text1": "Tag 1",
     "text2": "Heute startet unsere Rundreise \" Example text\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
  }
}

(solo una barra invertida (\) delante de las comillas).

 346
Author: kamituel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-26 12:49:19

Muestra la barra invertida porque también está escapando la barra invertida.

Aparte de las comillas dobles, también debe escapar las barras invertidas si desea incluir una en su cadena de comillas JSON. Sin embargo, si tiene la intención de utilizar una barra invertida en una secuencia de escape, obviamente no debe escapar de ella.

 16
Author: Alex Worden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-22 15:47:47

Cuándo y dónde usar \\\" en su lugar. OK si eres como yo te sentirás tan tonto como lo hice cuando me di cuenta de lo que estaba haciendo después de encontrar este hilo.

Si estás haciendo un .archivo / flujo de texto json e importar los datos desde allí, entonces la respuesta de flujo principal de solo una barra invertida antes de las comillas dobles:\" es la que está buscando.

Sin embargo, si eres como yo y estás tratando de obtener el w3schools.com "Tryit Editor" para tener comillas dobles en la salida del JSON.analizar (texto), entonces el que estás buscando es la triple barra invertida comillas dobles \\\". Esto se debe a que está construyendo su cadena de texto dentro de un bloque HTML <script>, y la primera barra invertida doble inserta una sola barra invertida en la variable de cadena, luego la siguiente barra invertida comilla doble inserta la comilla doble en la cadena de modo que la cadena de script resultante contenga el \" de la respuesta estándar y el analizador JSON analizará esto como citar.

<script>
  var text="{";
  text += '"quip":"\\\"If nobody is listening, then you\'re likely talking to the wrong audience.\\\""';
  text += "}";
  var obj=JSON.parse(text);
</script>

+1: dado que es una cadena de texto JavaScript, una doble barra invertida comilla doble \\" también funcionaría; porque la comilla doble no necesita escaparse dentro de una sola cadena entre comillas, por ejemplo '\"' y '"' dan como resultado la misma cadena JS.

 13
Author: Gregor y,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-12 17:05:01

Tenga en cuenta que esto ocurre con mayor frecuencia cuando el contenido ha sido "doble codificado", lo que significa que el algoritmo de codificación ha sido llamado accidentalmente dos veces.

La primera llamada codificaría el valor "text2":

DE: Heute startet unsere Rundreise "Texto de ejemplo". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

PARA: Heute startet unsere Rundreise \"Texto de ejemplo\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

Un segundo encoding luego lo convierte de nuevo, escapando los caracteres ya escapados:

FROM: Heute startet unsere Rundreise \"Texto de ejemplo\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

PARA: Heute startet unsere Rundreise \\\"Texto de ejemplo\\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

Entonces, si usted es responsable de la implementación del servidor aquí, verifique que no haya dos pasos tratando de codificar lo mismo contenido.

 6
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-20 11:59:46

Para escapar de las barras invertidas que causan problemas para los datos JSON, utilizo esta función.

//escape backslash to avoid errors
var escapeJSON = function(str) {
    return str.replace(/\\/g,'\\');
};
 1
Author: mbokil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-09 18:48:18

Si desea escapar la comilla doble en JSON, use \\ para escaparla.

Ejemplo si desea crear json del siguiente objeto javascript

{time: '7 "o" clock'}

Entonces debes escribir de la siguiente manera

'{"time":"7 \\"o\\" clock"}'

Si lo analizamos usando JSON.parse()

JSON.parse('{"time":"7 \\"o\\" clock"}')

El Resultado será

{time: "7 "o" clock"}
 1
Author: manas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-14 11:49:48