Node.js JSON.stringify()导致“ 在输出。 无法用Jqueryparsing

我正在使用Node.js(使用Express.js)将JSON数据对象从服务器传递到客户端视图。

当我把JSON对象直接渲染到视图中时,我得到了页面上显示的JSON对象(本作品):

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

而我的输出看起来像这样(更大,很多嵌套obj)

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

当我尝试把它传递给我的Jade View如下所示:

 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 

问题
当我将“tagsJSON”传递给视图时,输出包括html实体:

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

JQuery抛出一个错误,因为它不喜欢'“'。我怎样才能让节点给我正确的报价,或让jQuery接受这种格式?

有什么想法吗?

这是因为当你打电话

  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是为了输出HTML,所以它编码你的报价。 您应该使用不是HTML转义的呈现器,或者至less更改您的视图,以便您的参数不是HTML编码

如果您不希望输出内容中出现任何内容,请在视图中使用!{tagsJSON} 。 但是,输出JSON时,不需要查看。 你可以把你的对象,调用JSON.stringify 。 我不使用JADE,所以我不确定是否有创build可以调用JSON.stringify()视图的方法,但这正是我在JSP,velocity,ASP,PHP和Code JSON.stringify()所做的使用JSON.stringify ,而是使用给定语言的JSON工具)

在ejs中,它的<%- tagsJSON %>

  ^ <---- Note the "-" 

使用Swig.js时更好的解决scheme

{{ data|json|raw }}

Swig模板引擎方法:

既然Swig没有被提及,我会join我的版本。

我今天遇到了这个问题,花了好几个小时试图让它工作,所以我可以发送数据Chart.js: http : //www.chartjs.org/docs/

在我的情况下,我使用Geddy.js而不是Express.js。 像原来的海报,我也得到了HTML转义JSONstring的问题。

我正在使用Swig模板引擎。

感谢胡安·门德斯(Juan Mendes)提到的html转义 ,我发现了Swig开发者的这个讨论:

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

这导致我search一个选项来禁用自动转义。

我第一次尝试:

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

正如它在github页面中提到的那样,但是没有起作用,所以我去了文档,发现这个:

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

金! :d

所以最终解决

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