【问题标题】:When I JSON.stringify(object) I get a crazy string as a value当我 JSON.stringify(object) 我得到一个疯狂的字符串作为值
【发布时间】:2016-09-04 09:32:13
【问题描述】:

当我将一个包含对象数组的对象从我的快速路由发送到我的客户端时,我得到一个 [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 但我得到了这个疯狂的字符串,它不会让我对它做任何事情......

如果我尝试循环遍历它,它只会单独打印出每个字符。

【问题讨论】:

  • 似乎 &lt;%= ... %&gt; 是对输出进行 HTML 编码。模板引擎通常提供一种无需编码即可输出内容的方法。一旦你解决了这个问题,你还需要JSON.parse 字符串。仍然想知道是否有更好的方法将对象传递给客户端。
  • 我认为没有其他方法可以将数据发送到客户端,但 JSON.parse 每次尝试使用它时都会给我一个错误,即使在我将其字符串化后
  • @T.J.Crowder 这只是我尝试了 100 种不同的东西时的错字,当我回到原来的代码时不小心保留了它们
  • 如您所说,您需要先修复输出,然后才能使用JSON.parse。无论是什么,您都必须使用&lt;%= ... %&gt; 的非编码版本。您使用的是哪个模板引擎?
  • 呃,我很愚蠢。只需var messages = &lt;%-JSON.stringify(messages)%&gt;;

标签: javascript json express ejs


【解决方案1】:

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

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

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

【讨论】:

  • 是的,这就是答案。
  • 太棒了!谢谢
  • 当我在使用&lt;%- .... %&gt; 后控制台变量时,我得到了 Uncaught SyntaxError: Unexpected identifier 错误。为什么会出现此错误?
  • @Ben:不知道。浏览器看到的代码你看了吗?
【解决方案2】:

尝试改变这一点:

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

有了这个:

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

【讨论】:

  • 字符串上调用JSON.stringify有什么意义?另外,&lt;%=messages%&gt; 的结果/输出是什么?
  • @FelixKling 大声笑...我的问题是,messages 的输出是什么?
  • 它安慰了“[object Object]”如果我只是安慰了它而不把它串起来,它安慰了[object Object]
  • @evolutionxbox 消息的输出是[object Object]
猜你喜欢
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多