4

My custom method to get json from string:

function GetJSON(a) {
        if (typeof a !== "string" || !a || a == null) return null;
        a = a.replace(/\r\n|\r|\n|\t/g, '').replace(/\\/g, '/');
        return new Function("return " + a)();
    }

    var notes ='{editable:true,useAjax:false,notes:[{"top":76,"left":411,"width":30,"height":30,"text":"hill","editable":true},{"top":183,"left":556,"width":30,"height":30,"text":"lake","editable":true}]}';

    return GetJSON(notes); //<-- works fine

    //I am trying to replace my custom method with
      return JSON.parse(notes);

But I get syntax error when I call JSON.parse()

What can be wrong?

EDIT: I pasted the actual value that I pass to JSON.parse() from debug output.

1
  • For future reference ("what can be wrong" when you receive a syntax error), syntax error means that your input is syntactically invalid, I.E. it is not following the grammar rules of the language. Commented Apr 5, 2012 at 17:33

2 Answers 2

4
notes = "{editable:true,useAjax:false,notes:[" + notes + "]}";

You forgot to quote your keys here. It should be:

notes = '{"editable":true,"useAjax":false,"notes":[' + notes + ']}';

The final JSON should be:

var notes ='{"editable":true,"useAjax":false,"notes":[{"top":76,"left":411,...'
Sign up to request clarification or add additional context in comments.

2 Comments

This was the issue!! Silly me.
Yeah, JSON.parse is really strict about syntax :-P
2

Your notes portion is missing a , between the two {} sets, making it invalid JSON.

It should be

[..snip..] "editable":true}, ' + '{"top":20,"left"[...snip...]
                           ^^--- missing

1 Comment

There seems to be a comma in the code in the question (maybe it was edited?).

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.