我是JSON和JavaScript对象的新手。
首先,您应该知道什么是JSON:
JSON的语法受JavaScript对象文字表示法的启发,但是它们之间存在差异。
例如,在JSON中,所有 键都 必须加引号,而在对象文字中,则不需要:
// JSON: { "foo": "bar" } // Object literal: var o = { foo: "bar" };
引号在JSON上是必需的,因为在JavaScript中(更确切地说在ECMAScript 3rd。Edition中),不允许将 保留字 用作属性名称,例如:
var o = { if: "foo" }; // SyntaxError in ES3
而使用字符串文字作为属性名称(引用属性名称)不会出现任何问题:
var o = { "if": "foo" };
因此,对于 “兼容性” (也许容易评估?),引号是强制性的。
JSON中的数据类型也限制为以下值:
string
number
object
array
true
false
null
Strings变化的语法。它们 必须 用 双引号 分隔,而在JavaScript中,您可以互换使用单引号或双引号。
Strings
// Invalid JSON: { "foo": 'bar' }
可接受的JSON语法Numbers也发生了变化,例如0xFF,在JavaScript中,您可以使用十六进制文字,或(臭名昭著的)八进制文字,例如010。在JSON中,您只能使用十进制文字。
Numbers
0xFF
010
// Invalid JSON: { "foo": 0xFF }
有些错误的实现(Firefox 3.5+,IE8+,json2.js)错误地允许使用八进制文字,例如JSON.parse('01')应产生一个SyntaxError。
JSON.parse('01')
SyntaxError