I have confusion about what exactly people mean by Object Literals, JSON, JavaScript Objects, to me they seem similar:
{foo: \'bar\', bar : \'baz\'}
According to the specification, in JSON all strings, whether they are values or keywords, should be surrounded by double quotes.
Your example would be a valid JSON string if it contains the following:
{"foo": "bar", "bar": "baz"}
The variable jsonString
contains a JSON string:
var jsonString = '{"foo": "bar", "bar" : "baz"}'
The variable javascriptObject
contains a javascript object, initialized using an object literal:
var javascriptObject = {foo: 'bar', bar : 'baz'}
You can convert a json string to a javascript object with JSON.parse, and back again with JSON.stringify.
Object Literal:
Referencing mozilla ,
An object literal is a list of zero or more pairs of property names and associated values of an object, enclosed in curly braces ({}).
Javascript Object:
Referencing mozilla,
In JavaScript, an object is a standalone entity, with properties and type
JSON:
Referencing mozilla and mozilla
JSON (JavaScript Object Notation) is a data-interchange format. It closely resembles a subset of JavaScript syntax, although it is not a strict subset.JSON is a syntax for serializing objects, arrays, numbers, strings, booleans, and null. It is based upon JavaScript syntax but is distinct from it: some JavaScript is not JSON, and some JSON is not JavaScript.
In loose words,
An object
is a javascript variable which can have properties and type.
An object literal
is a way to assign properties and associated values to object
.
JSON is a more strict object literal
used for data interchange which is wrapped as string.
(Usually, strictness is there to allow all languages to use it, we cannot use function
as value, key
should always be in double quotes (In object literal its not compulsory))
AFAIK, above is object literal, json as well as javascript object, isn't it?
It is an object literal. It creates an object.
It is not JSON, as it doesn't conform to the syntax (which is a subset of object literal notation). The keys are not quoted and the wrong kind of quote marks ('
instead of "
) are used around the values.
How do you guys differentiate which is what ?
Context.
JSON doesn't usually appear (embedded) in the middle of JavaScript programs. It is a data format and usually appears as whole files (or HTTP responses).
When something expects an object it could get one from an object literal or from a variable (or a return value from a function call, etc, etc).
JSON originates from the object literal notation of JavaScript and itself is a string. That explains the similarity, when just looking at it. Today JSON is used as a general means of serializing all kinds of data, before submitting it over some network or storing it.
// this is a JSON variable
var json = '{"foo": "bar", "bar" : "baz"}';
// obj is a JavaScript obj, defined by the object literal on the right hand side
var obj = {foo: 'bar', bar : 'baz'};
In JS you can convert a JSON string into an object by using
var obj = JSON.parse( json );
and get the JSON representation of an object (excluding attached functions) by
var json = JSON.stringify( obj );
JSON is a just a data format, like XML. True JSON should have the keys surrounded by double quotes, like so:
{"foo":"bar"}
JavaScript Objects are part of the JavaScript language, and have associated things such as a prototype.
Object literals is creating a javascript object in place with brackets as opposed to using the new
keyword, or Object.create()
.
//object literal
var foo = {};
//equivalent
var foo = new Object();