Node.js JSON.stringify() 在输出中导致“。无法使用 Jquery 解析
Posted
技术标签:
【中文标题】Node.js JSON.stringify() 在输出中导致“。无法使用 Jquery 解析【英文标题】:Node.js JSON.stringify() causing " in output. Can't parse with Jquery 【发布时间】:2012-06-24 05:41:35 【问题描述】:我正在使用 Node.js(与 Express.js)将 JSON 数据对象从服务器传递到客户端视图。
当我将 JSON 对象直接渲染到视图时,我得到了页面上显示的 JSON 对象,如预期的那样(这个 WORKS):
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 抛出一个错误,因为它不喜欢 '"'。我怎样才能让 Node 给我正确的报价,或者让 jQuery 接受这种格式?
有什么想法吗?
【问题讨论】:
您是否正在查看浏览器中的输出"green":"title":"green","pagesContaining": ""
?如果您是,那么它已经为您进行了 HTML 编码。可能是因为pageprovider.findAllTag
对作为tagsJSONObj
参数传回的内容进行了HTML 编码。显示pageprovider.findAllTag
的代码
search_tags.jade
长什么样子?
【参考方案1】:
这是因为当你打电话时
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 转义的渲染器,或者至少更改您的视图,以便您的参数不是 HTML 编码
如果您不希望输出中的某些内容转义,请在视图中使用 !tagsJSON
。但是,在输出 JSON 时,不需要视图。你可以拿走你的东西,打电话给JSON.stringify
。我不使用 JADE,所以我不确定是否有一种方法可以创建可以调用 JSON.stringify()
的视图,但这就是我在 JSP、velocity、ASP、php 和 Code Igniter 中所做的(不使用 @ 987654326@,而是使用给定语言的 JSON 工具)
【讨论】:
谢谢。 !tagsJSON 工作得很好。我想用 JS 在客户端上重新创建我的数据集,这样我就可以使用该数据集轻松操作 DOM。我不想执行额外的 Ajax 请求来获取该数据。这就是为什么我想将我的 JSON obj 传递给视图内的 JS。这有意义吗? @JamisCharles 我明白了,您的视图不仅仅显示 JSON,那么!tagsJSON
是正确的方式。
这是基于问题的正确答案(关键省略了视图代码),但是,我认为最好只将数据/对象传递给视图,并在那里进行字符串化操作.在您的翡翠模板中尝试!JSON.stringify(data)
。这就是我决定的。【参考方案2】:
在 ejs 中,它的 <%- tagsJSON %>
^ <---- Note the "-"
【讨论】:
可能很明显,但请注意 之后的 - 而不是 = 【参考方案3】:使用 Swig.js 时的更好解决方案
data|json|raw
【讨论】:
好方法,如果您使用的是 Swig。 谢谢,我想知道如何在 swig 中解析 html 标签,现在我知道使用safe
太棒了,解决了 ` | json_encode`不覆盖!【参考方案4】:
Swig 模板引擎方法:
由于没有提到 Swig,我将添加我的版本。
我今天遇到了这个问题,花了好几个小时试图让它工作,以便我可以将数据发送到 Chart.js:http://www.chartjs.org/docs/
就我而言,我使用的是 Geddy.js 而不是 Express.js。和原贴一样,我也遇到了html转义JSON字符串的问题。
我正在使用 Swig 模板引擎。
感谢 Juan Mendes 提到 html 转义,我找到了 Swig 开发者的这个讨论:
https://github.com/jnordberg/wintersmith-swig/pull/1
这导致我搜索禁用自动转义的选项。
我第一次尝试:
data|raw // didn't work
正如 github 页面中提到的那样,但这不起作用,所以我去文档并找到了这个:
http://paularmstrong.github.io/swig/docs/tags/
黄金! :D
所以最终解决方案:
% autoescape false %
var data = data
% endautoescape %
【讨论】:
以上是关于Node.js JSON.stringify() 在输出中导致“。无法使用 Jquery 解析的主要内容,如果未能解决你的问题,请参考以下文章
来自 MySQL 数据库的查询在 node.js 和 JSON.stringify() 中返回 [Object] [Object] 似乎不起作用