JSON和JavaScript对象有什么区别?

这个问题在这里已有答案:

  • JSON和Object Literal Notation有什么区别?                                     8个答案

我是JSON和JavaScript对象的新手。

  • 有人可以解释一下JSON和JavaScript对象之间的区别吗?
  • 它们的用途是什么?
  • 这个比那个好吗? 还是取决于具体情况?
  • 何时使用哪一种,在什么情况下?
  • 为什么JSON首先创建? 它的主要目的是什么?
  • 有人可以举例说明何时应该使用JSON而不是JavaScript对象,反之亦然?
Pheap asked 2019-07-22T08:18:25Z
3个解决方案
152 votes

首先你应该知道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中的数据类型也限制为以下值:

  • JSON.parse('01')
  • JSON.parse('01')
  • JSON.parse('01')
  • JSON.parse('01')
  • 文字为:
    • JSON.parse('01')
    • JSON.parse('01')
    • JSON.parse('01')

JSON.parse('01')的语法发生了变化。 它们必须用双引号分隔,而在JavaScript中,您可以互换使用单引号或双引号。

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

接受的JSON语法JSON.parse('01')也会发生变化,在JavaScript中你可以使用十六进制文字,例如SyntaxError,或者(臭名昭着的)八进制文字,例如: 010.在JSON中,您只能使用十进制文字。

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

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

CMS answered 2019-07-22T08:20:00Z
24 votes

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

所以它只是一种格式,允许您从对象转换为字符串和返回,如果您想通过线路传输它们很方便。

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

Darin Dimitrov answered 2019-07-22T08:20:39Z
1 votes

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

使用JSON作为数据交换格式,您可以使用文本形式交换结构化数据。 它现在与JavaScript非常分离。 JavaScript对象允许您在执行JavaScript程序期间创建和使用结构化数据。

Joey answered 2019-07-22T08:21:12Z
translate from https://stackoverflow.com:/questions/3975859/what-are-the-differences-between-json-and-javascript-object