当我 JSON.stringify(object) 我得到一个疯狂的字符串作为值

When I JSON.stringify(object) I get a crazy string as a value

当我将一个包含对象数组的对象从我的快速路由发送到我的客户端时,我得到一个 [Object object] 然后当我尝试对其进行字符串化时,我得到了这个带有控制台消息的疯狂字符串

var messages = "<%=(JSON.stringify(messages))%>"
console.log(messages) 

将其打印到控制台...

{&#34;messages&#34;:[{&#34;content&#34;:&#34;cool mane&#34;,&#34;creator&#34;:&#34;joe&#34;},{&#34;content&#34;:&#34;test 4&#34;,&#34;creator&#34;:&#34;joe&#34;},{&#34;content&#34;:&#34; ewgdqf&#34;,&#34;creator&#34;:&#34;joe&#34;},

它应该是这样的,这样我就可以通过做 messages[0].content 但我得到了这个疯狂的字符串,它不允许我用它做任何事情...

如果我尝试遍历它,它只会自己打印出每个字符。

尝试改变这个:

var messages = "<%=(JSON.stringify(messages))%>"
console.log(messages) 

有了这个:

var messages = JSON.stringify("<%=messages%>");
console.log(messages) 

当使用 <%= ... %> 时,EJS 将对任何输出进行编码/转义。这就是 JSON 中的 " 被编码为 &#34; 的原因。 According to this answer,您可以使用 <%- ... %> 来防止转义。

也没有必要将输出放在字符串文字中。这实际上很糟糕,因为您可能会遇到嵌套引号的问题。让它直接输出到JS代码中即可:

var messages = <%-JSON.stringify(messages)%>;