118

我是 JSON 和 JavaScript 对象的新手。

  • 有人可以解释一下 JSON 和 JavaScript 对象之间的区别吗?
  • 它们的用途是什么?
  • 这个比那个好吗?还是视情况而定?
  • 什么时候用哪一个,在什么情况下?
  • 为什么首先创建 JSON?它的主要目的是什么?
  • 有人可以举例说明何时应该使用 JSON 而不是 JavaScript 对象,反之亦然?
4

3 回答 3

171

首先你应该知道 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

同时,使用字符串文字作为属性名称(引用属性名称)没有问题:

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

因此,对于“兼容性”(也许是简单的评估?),引号是强制性的。

JSON 中的数据类型也仅限于以下值:

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

变化的语法Strings。它们必须用双引号分隔,而在 JavaScript 中,您可以互换使用单引号或双引号。

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

接受的 JSON 语法Numbers也发生了变化,在 JavaScript 中,您可以使用十六进制文字,例如0xFF,或(臭名昭著的)八进制文字,例如010。在 JSON 中,您只能使用十进制文字。

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

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

于 2010-10-20T08:13:40.470 回答
28

JSON 是对象的字符串表示形式。它是一种可互操作的序列化格式。它不仅与 javascript 相关联。例如,.NET 的 JSON 序列化程序允许您序列化/反序列化 .NET 对象。

因此,它只是一种允许您从对象转换为字符串并返回的格式,如果您想通过网络传输它们,这很方便。

它非常接近 javascript 对象表示,如果您只是eval()一个 JSON 字符串,您将获得相应的对象。

于 2010-10-20T08:13:27.193 回答
2

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

JSON 是一种数据交换格式,您可以与它交换文本形式的结构化数据。现在它已经与 JavaScript 完全解耦了。JavaScript 对象允许您在 JavaScript 程序执行期间创建和使用结构化数据。

于 2010-10-20T08:15:09.903 回答