joe
joe

Reputation: 1713

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.

Upvotes: 14

Views: 8190

Answers (2)

Felix Kling
Felix Kling

Reputation: 816384

When using <%= ... %>, EJS will encode / escape any output. That's why the " in the 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)%>;

Upvotes: 21

Akram Saouri
Akram Saouri

Reputation: 1169

Try to change this :

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

With this :

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

Upvotes: -1

Related Questions