我是 JSON 和 JavaScript 对象的新手。
最佳答案
首先你应该知道 JSON 是什么:
JSON 的语法受到 JavaScript Object Literal 表示法的启发,但它们之间存在差异。
例如,在 JSON 中,所有的 keys 都必须被引用,而在对象字面量中,这不是必需的:
// 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 中的数据类型也限制为以下值:
字符串
编号
对象
数组
真
假
null
Strings
的语法发生了变化。它们必须用双引号分隔,而在JavaScript中,你可以互换使用单引号或双引号。
// Invalid JSON:
{ "foo": 'bar' }
Numbers
的公认 JSON 语法也发生了变化,在 JavaScript 中,您可以使用十六进制文字,例如 0xFF
,或(臭名昭著的)八进制文字,例如010
。在 JSON 中,您只能使用十进制文字。
// Invalid JSON:
{ "foo": 0xFF }
有一些错误的实现(Firefox 3.5+、IE8+、json2.js)错误地允许使用八进制文字,例如JSON.parse('01')
应该产生 SyntaxError
。
https://stackoverflow.com/questions/3975859/