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 %}