Dado que el formato JSON especifica que las comillas simples no se deben escapar, la mayoría de las bibliotecas (o incluso el analizador JSON nativo) fallarán si tiene una comilla simple escapada. Ahora, esto generalmente no es un problema ya que la mayoría de las veces haces un XHR que recupera algunos datos formateados como JSON y usas el texto de respuesta que contiene la cadena JSON que luego puedes analizar, etc.¿Cómo usar una cadena literal JSON?
En esta situación particular, Tengo una cadena JSON almacenada en una base de datos como texto ... entonces la base de datos contiene algo como {"property":"value"}
y quiero mostrar esto como parte de una página HTML creada por el servidor para que el código JavaScript en esa página se vea así:
var x = '{"property":"value"}';
Ahora bien, si la cadena JSON en la base de datos contiene una comilla simple como esto:
{"property":"val'ue"}
Entonces necesito escapar de ella o de lo que nunca seré capaz de utilizarlo como una cadena:
console.clear();
var obj = {prop:"val'ue"};
var str = JSON.stringify(obj);
console.log("JSON string is %s",str);
console.dir(JSON.parse(str)); //No problem here
//This obviously can't work since the string is closed and it causes an invalid script
//console.dir(JSON.parse('{prop:"val'ue"}'));
//so I need to escape it to use a literal JSON string
console.dir(JSON.parse('{"prop":"val\'ue"}'));
entonces la pregunta es ¿por qué no se considera {"prop":"val\'ue"}
una cadena JSON válida?
Entonces, ¿cuál es el problema con 'console.dir (JSON.parse ('{" prop ":" val \' ue "} '))'? funciona para mí (cromo) – mykhal
Correcto, mi pregunta era más por qué esto consideraba JSON no válido {"prop": "valu \ 'ue"} (según las especificaciones) cuando en una situación como la que describo necesitas tener esto en tu cadena. Esto me obliga a volver a procesar una cadena JSON ya codificada. – SBUJOLD