首先你应该知道什么是 JSON:
JSON 的语法受到 JavaScript Object Literal 表示法的启发,但它们之间存在差异。
例如,在 JSON 中所有keys必须加引号,而在对象字面量中则不需要:
// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
JSON 中的引号是强制性的,因为在 JavaScript 中(更准确地说是在 ECMAScript 第 3 版中),使用保留字因为属性名称是不允许的,例如:
var o = { if: "foo" }; // SyntaxError in ES3
然而,使用字符串文字作为属性名称(引用属性名称)不会出现任何问题:
var o = { "if": "foo" };
So for “兼容性”(也许很容易评估?)引号是强制性的。
JSON 中的数据类型也限制为以下值:
string
number
object
array
- A literal as:
的语法为Strings
变化。他们have to被界定为双引号,而在 JavaScript 中,您可以互换使用单引号或双引号。
// Invalid JSON:
{ "foo": 'bar' }
公认的 JSON 语法Numbers
也发生了变化,在 JavaScript 中你可以使用十六进制文字,例如0xFF
,或(臭名昭著的)八进制文字,例如010
。在 JSON 中,您只能使用十进制文字。
// Invalid JSON:
{ "foo": 0xFF }
There are some buggy implementations (Firefox 3.5+, IE8+, json2.js) where octal literals are wrongly allowed, e.g. JSON.parse('01')
should produce a SyntaxError
.