joe joe - 6 months ago 31
Javascript Question

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

When I send an object with an array of objects in it from my express route to my client, I get an [Object object] and then when I try to stringify it, I get this crazy string with this console message

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


Which prints this out to the console ...

{&#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;},


It should be something so I can iterate through it by doing
messages[0].content but I'm getting this crazy string that won't let me do anything with it...

If I try to loop through it, it just prints out each character by itself.

Answer

When using <%= ... %>, EJS will encode / escape any output. That's why the " in JSON are encoded as &#34;. According to this answer, you can prevent escaping by using <%- ... %> instead.

There is also no need to put the output inside a string literal (it's actually bad since you can get problems with nested quotes). Just let it output directly into the JS code:

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