我是JSON和JavaScript对象的新手。
答案 0 :(得分:152)
首先你应该知道JSON是什么:
JSON的语法受JavaScript Object Literal表示法的启发,但它们之间存在差异。
例如,在JSON中,必须引用所有键,而在对象文字中,这不是必需的:
// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
引号在JSON上是必需的,因为在JavaScript中(更确切地说,在ECMAScript 3rd。版本中),不允许使用保留字作为属性名称,例如:
var o = { if: "foo" }; // SyntaxError in ES3
虽然使用字符串文字作为属性名称(引用属性名称)没有问题:
var o = { "if": "foo" };
那么对于“兼容性”(并且可能很容易评估?),引号是强制性的。
JSON中的数据类型也限制为以下值:
string
number
object
array
true
false
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
。
答案 1 :(得分:24)
JSON是对象的字符串表示形式。它是一种可互操作的序列化格式。它不仅仅与javascript绑定。例如,有.NET的JSON序列化程序允许您序列化/反序列化.NET对象。
所以它只是一种允许你从对象转换为字符串和返回的格式,如果你想通过线路传输它们很方便。
它非常接近javascript对象表示,如果您只是eval()
一个JSON字符串,您将获得相应的对象。
答案 2 :(得分:1)
JSON是一种数据交换格式,它恰好看起来像是您可以执行的YAML或JavaScript代码的子集,并且可以返回一个对象。 JavaScript对象只是JavaScript中的一个对象。
使用JSON作为数据交换格式,您可以使用文本形式交换结构化数据。它现在与JavaScript非常分离。 JavaScript对象允许您在执行JavaScript程序期间创建和使用结构化数据。