在JSON中,为什么每个名称都被引用?
JSON规范说JSON是一个对象或一个数组。 在物体的情况下,
对象结构被表示为围绕零个或多个名称/值对(或成员)的一对大括号。 名称是一个字符串。 ...
后来,规范说明了一个字符串被引号括起来。
为什么?
从而,
{"Property1":"Value1","Property2":18}
并不是
{Property1:"Value1",Property2:18}
问题1 :为什么不让名称/值对中的名称成为不带引号的标识符?
问题2 :在Javascript中评估时,上述两种表示之间是否存在语义差异?
问题1:为什么不让名称/值对中的名称成为不带引号的标识符?
JSON的设计理念是“保持简单”
“有报价的名字"
“比‘你可能引述其名称简单很多"
或'
但你没有,除非它们包含某些字符(或字符,将使其成为一个关键词的组合)和'
或"
可需要根据您选择的分隔符来引用“。
问题2:在Javascript中评估时,上述两种表示之间是否存在语义差异?
在JavaScript中它们是相同的。
我在Douglas Crockford(JSON标准的创建者)给雅虎的演讲中留下了一段引文。
他谈到了他如何发现JSON,以及为什么他决定使用带引号的键:
....那是当我们发现没有引号的名字问题。 事实证明,ECMA脚本3有一个重击保留字策略。 保留字必须在关键位置引用,这实际上是一个麻烦。 当我将这个标准化时,我不想把所有的保留字都放在标准中,因为它看起来很愚蠢。
当时,我试图说服人们:是的,你可以使用JavaScript编写应用程序,它实际上会起作用,并且它是一种很好的语言。 然后,我不想同时说:看看他们做的这件非常愚蠢的事情! 所以我决定,而是让我们引用关键字。
那样的话,我们不必告诉任何人这是多么的糟糕。
这就是为什么直到今天,密钥都以JSON引用。
你可以在这里找到完整的视频和成绩单。
Both :
和空格在标识符中是允许的。 如果没有引号,这会在尝试确定标识符的确切构成时造成歧义。