为什么JSON只允许字符串成为键?

pal*_*n_t 12 javascript json ecma262

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

nnn*_*nnn 7

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

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

"考虑JSON是JavaScript的一部分"

不,不是.较新的浏览器提供了创建和解析JSON的方法,但除了JSON是字符串格式且JavaScript可以执行字符串之外,它们不是语言的一部分.JSON 始终是字符串表示 - 必须对其进行解析以创建在JavaScript(或其他语言)中使用的对象,一旦发生这种情况,JavaScript(或其他语言)将生成的对象视为与任何其他对象相同.

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


Apa*_*ith 5

根据JSON代表性的发现者的说法,主要原因是,

在解析JSON数据,有机会/可能性,关键 你使用指一个可能是 保留字在你的解析语言。

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

例子 :

{ 
    id: 1234, 
    name: "foo", 
    do: "somthing"
} 
Run Code Online (Sandbox Code Playgroud)

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

  • 虽然大多数编程语言不会使用数字作为键,但也不允许使用数字。 (4认同)

ale*_*lex -4

因为这就是规范的编写方式。

  • @paladin_t——不一定——很多作家都是相当不讲道理的。;) (8认同)
  • 那为什么这么写呢。一切都是有原因的。 (7认同)
  • @paladin_t——不一定。有时这只是作者的偏好。 (5认同)