Saltar al contenido

Error de análisis de json con comillas dobles

Solución:

Javascript elimina el escape de sus cadenas y json también los elimina. la primera cuerda '{"result": ["lunch", ""Show""] }' ) es visto por el analizador json como
{"result": ["lunch", ""Show""] }, porque " en javascript significa ", pero no sale de la cadena entre comillas dobles.

La segunda cuerda '{"result": ["lunch", "\"Show\""] }' obtiene primero sin escapar a {"result": ["lunch", ""Show""] } (y json no ha escapado correctamente).

Creo que '{"result": ["lunch", "\"Show\""] }' debería funcionar también.

Bueno, finalmente, el análisis de JSON usa la misma evaluación, por lo que no hay diferencia cuando les das algo. con sintaxis incorrecta. En este caso, debe escapar correctamente sus comillas en php, y luego escapar de ellas y sus barras diagonales de escape con json_encode

<?php
    $json = '{"result": ["lunch", ""Show""] }';
    echo json_encode($json);
?>

OUTPUT: "{"result": ["lunch", "\"Show\""] }"

Esto debería funcionar en JS del lado del cliente (si no he cometido errores tipográficos).

Este problema es causado por el mecanismo de escape de cadena de dos pliegues: uno proviene de JS y el otro de JSON.

Se utiliza una combinación del carácter de barra invertida combinada con otro carácter siguiente para representar un personaje que de otra manera no es representable dentro de la cadena. ” \ ” significa ”, etc.

Este mecanismo de escape tiene lugar antes de que funcione JSON.parse ().

Por ejemplo,

var parsedObj = JSON.parse('{"sentence": "It is one backslash(\\)"}');
console.log(parsedObj.sentence);
>>>"It is one backslash()"

Desde la perspectiva del generador de cuerdas, pasa cuatro contragolpes ” en el intérprete de JavaScript.

Desde la perspectiva del intérprete de JavaScript, interpreta hay dos contragolpes() ya que cada secuencia ‘\’ se interpretará como una ”.

Desde la perspectiva del analizador JSON, recibe dos contragolpes(\) y las reglas de escape de la cadena JSON lo analizarán como un solo ” que es el resultado de salida.

Explica tu primer código:

var testJson = '{"result": ["lunch", ""Show""] }';
//The real string after sequence escaping in to JS is
//'{"result": ["lunch", ""Show""] }' 
//which is passed into the JSON.parse.
//Thus, it breaks the JSON grammar and generates an error
var tags = JSON.parse(testJson);  
alert (tags.result[1]);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *