JSON from EJS to JSON object in JS

14,873

try this:

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

OR:

var initData = <%-JSON.stringify(list)%>;
Share:
14,873
George L
Author by

George L

Updated on June 20, 2022

Comments

  • George L
    George L almost 2 years

    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"}]);
    
  • George L
    George L almost 11 years
    first one worked perfectly! could you explain why the single quotes makes it work though?
  • karaxuna
    karaxuna almost 11 years
    @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": "..." }])
  • OMGPOP
    OMGPOP almost 9 years
    why is initData an object instead of a string? we stringified it
  • Vadorequest
    Vadorequest almost 9 years
    @OMGPOP I wonder the same and I guess it's related to the <%- operator somehow. <%= would fail I think.
  • Alex Ciminian
    Alex Ciminian over 8 years
    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.
  • Danny Dulai
    Danny Dulai almost 8 years
    this doesn't work if you replace "South Hills" with "South Hill's"
  • Danny Dulai
    Danny Dulai almost 8 years
    the first one doesn't -- the second one works fine for single quotes.