The difference between JSON and JavaScript

I’ve been doing some interviews at work, and one of the questions I like to ask is “Can you tell me what JSON is?” and I rarely get a satisfying answer. One answer I do hear a lot is that JSON is Javascript, which is not the case. Perhaps this post might help someone understand the differences.

So what is JSON anyway?

JSON is a data-interchange format. If I was explaining it to my mum I’d tell her it’s a language for computers to pass information to each other, in much the same way as us humans use language to communicate with each other.

Some people say JSON is a subset of JavaScript but this isn’t true because JSON allows a couple of unescaped characters (the line separator U+2028 and paragraph separator U+2029) in its strings which ECMA-262 (the JavaScript standard) does not allow.

JSON is independent of the JavaScript language and can be parsed and constructed by/in other languages. Consider it to be a message format.

And what does it look like?

A JSON string can either be in the format of a JSON array:

[ {"pet" : "cat", "colour" : "brown"}, {"pet" : "rabbit", "colour" : "white"} ]

or a JSON object:

{"petList" : [ {"pet" : "cat", "colour" : "brown"}, {"pet" : "rabbit", "colour" : "white"} ] }

Note that these two formats are being used to store the same data in the same structure, it’s just that the second example is wrapping the array in a JSON object. However, returning an array may expose you to security vulnerabilities: see this blog post for more details, so take this into account if you have the luxury of designing the message format.

Some rules for valid JSON include:

keys must be strings enclosed in double quotes
values can be strings, numbers, JSON objects, arrays, true, false, or null.

Values can’t be functions.

Contrast this to a JavaScript object literal then which can look like the following:

{ petList: [ {pet : "cat", colour : "brown"} ] , numberOfPets : function() { return 1;} }

You can see that the value of the key ‘numberOfPets’ can be a function, and that none of the keys in the object literal are strings.

For further info and a great visual reference of JSON syntax, see http://json.org/.