11

I am using EJS with Node.JS, and am passing a JSON object into it, but need to have access to it as a usable object in the page. I am getting the unexpected token o error from this:

var initData=JSON.parse(<%-JSON.stringify(list)%>);

I cant figure out whats wrong here.

This is what it looks like in the file when rendered:

var initData=JSON.parse([{"title":"South Hills Health System - University Health Center","adr":"200 Lothrop St,15213","coords":"40.441875,-79.960813","images":[],"tags":[],"_id":"51c0e9798384f40000000017"},{"title":"Bombay Food Market","adr":"4605 Centre Avenue, Pittsburgh, PA 15213, USA","coords":null,"images":[],"tags":["indian","groceries","ethnic","store"],"_id":"51c0519e02b7cbec73000002"}]);

1 Answer 1

27

try this:

var initData = JSON.parse('<%-JSON.stringify(list)%>');

OR:

var initData = <%-JSON.stringify(list)%>;
Sign up to request clarification or add additional context in comments.

7 Comments

first one worked perfectly! could you explain why the single quotes makes it work though?
@GeorgeL JSON.parse takes STRING as parameter and look at your output, you are passing array in JSON.parse. single quotes does this: JSON.parse('[{ "title": "..." }]') instead of this: JSON.parse([{ "title": "..." }])
why is initData an object instead of a string? we stringified it
@OMGPOP I wonder the same and I guess it's related to the <%- operator somehow. <%= would fail I think.
Be careful, this method does not work for arbitrary objects. For example, regexes end up as empty objects. { a: /bcd/ } will output { a: {} }. This is because regexes have serialization issues - stackoverflow.com/questions/12075927/serialization-of-regexp. I don't know if other types have this problem.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.