Lo sé, no lo necesito, pero creo que realmente lo necesito.

Quiero tener un código JS válido representado por handlebarsjs antes , incluso se representa. Las herramientas de minificación de JS solo minimizan archivos JS válidos y la minificación sobre la marcha aumenta el tiempo de procesamiento. Este es el código del manillar JS.

var stringsObj = JSON.parse('{{{ json stringsDataObj }}}');

Como puede ver, las comillas simples allí arriba hacen que esa línea de código sea un código JS válido . El handlebars ayudante es:

function json(context) {
    return JSON.stringify(context);
}

¿Y cuál es el problema? Bueno, algunos de los elementos en stringObj tienen comillas simples

stringsDataObj = {
  "str1": "I'm here",
  "str2": "You're there"
}

Y cuando se rinde

var stringsObj = JSON.parse('"str1": "I'm here", "str2": "You're there"');

Da un error JS

¿Hay alguna forma de escapar también de las comillas simples en JSON.stringify? Intenté con una función de reemplazo, pero sin éxito.

0
João Pimentel Ferreira 22 ene. 2018 a las 13:06

3 respuestas

La mejor respuesta

Lo que debería representarse realmente aquí es:

var stringsObj = JSON.parse('{"str1": "I'm here", "str2": "You're there"}');

JSON es un código Javascript válido, es sintácticamente un subconjunto de Javascript. Lo que significa que JSON.stringify está generando un literal Javascript válido. En realidad, no necesita pasar por las complicaciones de generar JSON y luego asegurarse de que sea un literal de cadena Javascript que luego analiza con JSON.parse. Tu solo haces:

var stringsObj = {{{ json stringsDataObj }}};

Lo que hace:

var stringsObj = {"str1": "I'm here", "str2": "You're there"};

Que es un objeto Javascript válido literal.

1
deceze 22 ene. 2018 a las 10:11

Resolví mi problema con el siguiente ayudante

function json(context) {
    return JSON.stringify(context).replace(/[\/\(\)\']/g, "\\$&");
}

Es decir, el escape debe hacerse después de la cadena de caracteres.

2
João Pimentel Ferreira 22 ene. 2018 a las 17:58

Esto debería mostrar la cotización simple en el navegador:

var final_string = JSON.stringify(context).replace(/[\/\(\)\']/g, "'");
2
Yaw 8 ene. 2020 a las 09:24
48378985