Node.js JSON.stringify()导致&;引用;在输出方面。Can';使用Jquery进行语法分析

Node.js JSON.stringify()导致&;引用;在输出方面。Can';使用Jquery进行语法分析,jquery,json,node.js,express,pug,Jquery,Json,Node.js,Express,Pug,我使用Node.js(with Express.js)将JSON数据对象从服务器传递到客户端视图 当我将JSON对象直接呈现给视图时,我会按照预期在页面上显示JSON对象(这很有效): 我的输出是这样的(更大,很多嵌套的obj) 当我试着像这样把它传给我的玉景时: pageprovider.findAllTag( function(error, tagsJSONObj){ //res.send(pages); pageprovider.findAll( function

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

当我将JSON对象直接呈现给视图时,我会按照预期在页面上显示JSON对象(这很有效):

我的输出是这样的(更大,很多嵌套的obj)

当我试着像这样把它传给我的玉景时:

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接受此格式


有什么想法吗?

因为你打电话的时候

    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和CodeIgniter中所做的(不使用
JSON.stringify
,而是为给定语言使用JSON工具)

在ejs中,它的

^Swig模板引擎方法:
因为没有提到Swig,所以我将添加我的版本

我今天遇到了这个问题,花了好几个小时试图让它正常工作,以便将数据发送到Chart.js:

在我的例子中,我使用的是Geddy.js而不是Express.js。与原始海报一样,我也遇到了html转义JSON字符串问题

我正在使用Swig模板引擎

多亏Juan Mendes提到了html转义,我发现Swig开发人员进行了以下讨论:

这让我搜索了一个选项来禁用自动转义

我首先尝试:

{{ data|raw }} // didn't work
正如github页面中提到的,但这不起作用,因此我查看了文档并发现:

黄金!:D

因此,最终解决方案是:

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

使用Swig.js时的更好解决方案


{{data | json | raw}

您是否正在查看浏览器中的输出
{“绿色”:{“标题”:“绿色”,“页面内容”:“}
?如果您是,那么它是为您进行HTML编码的。可能是因为
pageprovider.findAllTag
对它作为
tagsJSONObj
参数传回的内容进行HTML编码。显示
pageprovider.findAllTag
搜索标记.jade的代码是什么样子的?谢谢。!{Tagsjsson}工作非常出色。我想用JS在客户端上重新创建数据集,以便使用该数据集轻松操作DOM。我不想执行额外的Ajax请求来获取该数据。这就是为什么我想将JSON obj传递给视图中的JS。这有意义吗?@JamisCharles我明白了,您的视图不仅仅显示JSON,然后
!{tagsJSON}
是正确的方法。这是基于问题的正确答案(关键是省略了视图代码),但是,我认为最好只向视图传递数据/对象,并在那里执行stringify操作。请尝试
!{JSON.stringify(data)}
在您的jade模板中。这是我决定的。这可能很明显,但请注意,如果您使用的是Swig,那么在好的方法之后使用-而不是=。谢谢,我想知道如何在Swig中解析html标记,现在我知道使用
safe
非常棒,并且修复了“json_encode”没有涵盖的问题!
          ^ <---- Note the "-"
{{ data|raw }} // didn't work
{% autoescape false %}
var data = {{ data }}
{% endautoescape %}