JSON和JavaScript对象有什么区别?

我是JSON和JavaScript对象的新手。

  • 有人可以解释一下JSON和JavaScript对象之间的区别吗?
  • 他们有什么用途?
  • 这个比那个好吗? 还是取决于情况?
  • 何时使用哪一种,在什么情况下?
  • 为什么JSON首先创build? 它的主要目的是什么?
  • 有人可以给出什么时候应该使用JSON而不是JavaScript对象的例子,反之亦然?

首先,您应该知道JSON是什么:

  • 这是语言不可知的数据交换格式。

JSON的语法受JavaScript Object Literal表示法的启发,但它们之间存在差异。

例如,在JSON中,所有的键都必须被引用,而在对象文字中这是不必要的:

// JSON: { "foo": "bar" } // Object literal: var o = { foo: "bar" }; 

引号对于JSON是必须的,因为在JavaScript中(更确切地说ECMAScript 3rd Edition), 保留字用作属性名称是不允许的,例如:

 var o = { if: "foo" }; // SyntaxError in ES3 

而使用string作为属性名称(引用属性名称)没有问题:

 var o = { "if": "foo" }; 

那么对于“兼容性” (也许容易评估?)引用是强制性的。

JSON中的数据types也被限制为以下值:

  • string
  • number
  • object
  • array
  • 字面为:
    • true
    • false
    • null

Strings的语法发生了变化。 它们必须双引号分隔,而在JavaScript中,可以交替使用单引号或双引号。

 // Invalid JSON: { "foo": 'bar' } 

接受的JSON语法的Numbers也改变,在JavaScript中你可以使用hex文字,例如0xFF ,或(臭名昭着的)八进制文字,如010 。 在JSON中,只能使用十进制字面值。

 // Invalid JSON: { "foo": 0xFF } 

有一些错误的实现(Firefox 3.5 +,IE8 +,json2.js)八进制文字被错误地允许,例如JSON.parse('01')应该产生一个SyntaxError

JSON是一个对象的string表示。 这是一个可互操作的序列化格式。 它不是只绑定到JavaScript。 例如,有用于.NET的JSON序列化程序,允许您序列化/反序列化.NET对象。

所以这只是一个格式,允许你从对象转换为string,并返回这是方便的,如果你想通过电线传输它们。

这是非常接近JavaScript对象表示,如果你只是eval()一个JSONstring,你会得到相应的对象。

JSON是一种数据交换格式,恰好看起来像YAML或JavaScript代码的一个子集,您可以执行并获取对象。 JavaScript对象只是JavaScript中的一个对象。

使用JSON作为数据交换格式,您可以用文本forms交换结构化数据。 到目前为止,它与JavaScript很好的分离。 JavaScript对象允许您在执行JavaScript程序期间创build和处理结构化数据。