16

为什么 JSON 只允许 astring成为一对的键?为什么不是其他类型,例如null, number, bool, object, array?考虑到 JSON 与 JavaScript 密切相关,我可以从 JavaScript 规范 (ECMA-262) 中得出原因吗?我完全是 JavaScript 的新手,你能帮我指出来吗?

4

3 回答 3

11

JSON 格式故意基于 JavaScript 对象字面量语法和数组字面量语法的子集,而 JavaScript 对象只能将字符串作为键 - 因此 JSON 键也是字符串。(好吧,您可以将数字用作 JavaScript 对象键,但实际上它们会转换为字符串。)

请注意,JSON 的意义在于它是数据的字符串表示形式,允许在不同环境中运行在不同机器上的不同语言编写的程序之间轻松交换。如果您想使用一个对象作为键,那么该对象又必须以某种方式表示为用于传输的字符串,但是接收语言需要能够使用对象作为键,这意味着您需要对于那些只会一团糟的语言,JSON 的有限子集。

“考虑到 JSON 是 JavaScript 的一部分”

不,不是。较新的浏览器提供了创建和解析 JSON 的方法,但它们不是这种语言的一部分,只是 JSON 是一种字符串格式,而 JavaScript 可以处理字符串。JSON始终是一个字符串表示形式——它必须被解析以创建一个在 JavaScript(或其他语言)中使用的对象,并且一旦发生这种情况,JavaScript(或其他语言)就会像对待任何其他对象一样对待生成的对象。

(另请注意,JSON 的特定位根本不一定有任何键:它可能只是一个数组,例如'["one","two","three"]'.)

于 2012-02-16T02:46:34.590 回答
5

根据表征的发现者,主要原因JSON是,

在解析JSON数据时, 您用来引用值的有可能是解析语言中的 保留字

请参阅Douglas Crockford 的演讲,他是JSON表示的发现者。

例子 :

{ 
    id: 1234, 
    name: "foo", 
    do: "somthing"
} 

由于JSON是跨语言兼容的,我们可以在多种语言中使用这个数据集。但是,这个词do是一个关键字Javascript。解析时会出现语法错误。

于 2016-04-21T07:09:57.903 回答
-4

因为那是规范的编写方式。

于 2012-02-16T02:13:02.257 回答