7

I have some JSON encoded strings and I need to easily parse them. Any ideas how to do this? I am a noob in javaScript and I can't do it myself. I read that parsing json is really hard.

Please help!

  • possible duplicate of [Serializing to JSON in jQuery](http://stackoverflow.com/questions/191881/serializing-to-json-in-jquery) – outis Dec 26 '11 at 10:23

3 Answers3

11

JSON is valid Javascript, so you can eval() it:

var data = eval(json);

However it's safer to use JSON.parse()[docs], when this function is available:

var data = JSON.parse(json);

So you could do something like this:

if (window.JSON) {
    data = JSON.parse(json);
} else {
    data = eval('('+json+')');
}

Note the use of parenthesis in eval(). See @CMS's comment and this.

You could also use an existing library, like this one (adds JSON.parse on browsers that do not have it).

If you are using jQuery, use $.parseJSON()[docs].

Community
  • 1
  • 1
Arnaud Le Blanc
  • 98,321
  • 23
  • 206
  • 194
  • You could also use `data = ((window.JSON&&JSON.parse)||eval)(json);`, which is a little more compact. – icktoofay Sep 04 '11 at 19:32
  • 1
    `eval(json)` will not work if the json string represents an object (e.g. `'{"foo":"bar"}'`) because the first curly brace, will be interpreted as the start of a statement *block*, not the start of an object literal, you should do: `eval('('+json+')');` to force the evaluation into an *expression context*. [See also](http://stackoverflow.com/q/3360356#3360404). Anyway another option would be to use the `Function` constructor, IMO it's better, since `eval` makes engine optimization harder, for example: `Function('return '+json)();`. – Christian C. Salvadó Sep 04 '11 at 20:54
3

JSON.parse() is defined in most Javascript environments these days.

nicolaskruchten
  • 26,384
  • 8
  • 83
  • 101
1

try to take a look at http://www.json.org/js.html. You need something like:

var myObject = JSON.parse(myJSONtext, reviver);
tmadsen
  • 941
  • 7
  • 14