Node.js JSON.stringify () que causa & quot; en la salida. No se puede analizar con Jquery

Estoy usando Node.js (con Express.js) para pasar un objeto de datos JSON del servidor a la vista del cliente.

Cuando renderizo el objeto JSON directamente a la vista, obtengo el objeto JSON que se muestra en la página como se esperaba (esto FUNCIONA):

pageprovider.findAllTag( function(error, pages){ res.send(pages); }) 

Y mi salida se ve así (mucho más grande, muchos objetos nesteds)

 {"green":{"title":"green","pagesContaining": ""}} 

Cuando trato de pasarlo a mi Jade View así:

 pageprovider.findAllTag( function(error, tagsJSONObj){ //res.send(pages); pageprovider.findAll( function(error, pages){ res.render('search_tags.jade', { locals: { title: 'Search by Tags', 'pages': pages, tagsJSON: JSON.stringify(tagsJSONObj) //pass the tags data as a JSON obj } }); }) //pageprovider.findAll }) //pageprovider.findAllTag 

El problema
Cuando paso ‘tagsJSON’ a la vista, la salida incluye las entidades html:

 var obj = jQuery.parseJSON( "{"name": 'value'}"); 

JQuery lanza un error porque no le gusta “”. ¿Cómo puedo hacer que Node me brinde la cotización adecuada o que jQuery acepte este formato?

¿Alguna idea?

Es porque cuando llamas

  res.render('search_tags.jade', { locals: { title: 'Search by Tags', 'pages': pages, tagsJSON: JSON.stringify(tagsJSONObj) //pass the tags data as a JSON obj } }); 

search_tags.jade está diseñado para generar HTML, por lo que codifica tus citas. Debería usar un procesador que no escape HTML, o al menos cambie su vista para que sus parámetros no estén codificados en HTML

Si no quiere que se escape algo en la salida, use !{tagsJSON} dentro de la vista. Sin embargo, al generar JSON, no hay necesidad de una vista. simplemente puede tomar su objeto, llame a JSON.stringify . No uso JADE, por lo que no estoy seguro de si hay una manera de crear una vista que solo pueda llamar a JSON.stringify() , pero eso es lo que he hecho en JSP, velocidad, ASP, PHP y Code Igniter (no usando JSON.stringify , en su lugar usa una herramienta JSON para el idioma dado)

en ejs, su <%- tagsJSON %>

  ^ <---- Note the "-" 

Mejor solución al usar Swig.js

{{ data|json|raw }}

Swig Templating Engine método:

Como no se ha mencionado a Swig, agregaré mi versión en.

Encontré este problema hoy y pasé unas cuantas horas intentando que funcionara para poder enviar datos a Chart.js: http://www.chartjs.org/docs/

En mi caso, estaba usando Geddy.js en lugar de Express.js. Al igual que el póster original, también obtuve el problema de la cadena JSON escapada html.

Estoy usando el motor de plantillas Swig.

Gracias a Juan Mendes por mencionar html escape , encontré esta discusión del desarrollador de Swig:

https://github.com/jnordberg/wintersmith-swig/pull/1

Lo que me llevó a buscar una opción para deshabilitar el escape automático.

Lo intenté por primera vez:

 {{ data|raw }} // didn't work 

como se mencionó en la página de github, pero eso no funcionó, así que fui a la documentación y encontré esto:

http://paularmstrong.github.io/swig/docs/tags/

¡Oro! :RE

Así que la solución final :

 {% autoescape false %} var data = {{ data }} {% endautoescape %}