The encoding syntax and its interpretation is defined by Internet RFC4627, but is briefly summarised here:
.EX \f2text ::= \f2array | \f2object \f2value ::= \f5null | \f5true | \f5false | \f2number | \f2string | \f2array | \f2object \f2object ::= \f5'{' [\f2pair (\f5',' \f2pair)*] \f5'}' \f2pair ::= \f2string \f5':' \f2value \f2array ::= \f5'[' [\f2value (\f5',' \f2value)*] \f5']' \f2number ::= \f2int \f2frac? \f2exp? \f2int ::= \f5'-'? \f5[0-9] | \f5[1-9][0-9]+ \f2frac ::= \f5'.' \f5[0-9]+ \f2exp ::= \f5[eE][-+]? \f5[0-9]+ \f2string ::= \f5'"' \f2char* \f5'"' \f2char ::= \f5[^\ex00-\ex1F"\e\e] | \f5'\e"' | \f5'\e/' | \f5'\eb' | \f5'\ef' | \f5'\en' | \f5'\er' | \f5'\et' | \f5'\eu' \f2hex \f2hex \f2hex \f2hex \f2hex ::= \f5[0-9a-fA-F]
A sequence of blank, tab, newline or carriage-return characters (`white space') can appear before or after opening and closing brackets and braces, colons and commas, and is ignored. The null represents a null value of any type. The strings in the pairs of an object are intended to represent member names, and should be unique within that object. Note that array and object denotations can be empty. Also note that the RFC wants applications to exchange a text (ie, object or array) not an arbitrary value .
D Crockford, ``The application/json Media Type for JavaScript Object Notation (JSON)'', RFC4627 .
"http://www.json.org/"