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 ...
{"messages":[{"content":"cool mane","creator":"joe"},{"content":"test 4","creator":"joe"},{"content":" ewgdqf","creator":"joe"},
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.
JSON.stringify() converts a value to JSON notation representing it: Boolean , Number , String , and BigInt (obtainable via Object() ) objects are converted to the corresponding primitive values during stringification, in accordance with the traditional conversion semantics.
Stringify a JavaScript Object const myJSON = JSON.stringify(obj); The result will be a string following the JSON notation.
JSON. stringify() will encode values that JSON supports. Objects with values that can be objects, arrays, strings, numbers and booleans. Anything else will be ignored or throw errors.
The JSON array data type cannot have named keys on an array. When you pass a JavaScript array to JSON. stringify the named properties will be ignored. If you want named properties, use an Object, not an Array.
When using <%= ... %>
, EJS will encode / escape any output. That's why the "
in the JSON are encoded as "
. 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)%>;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With