2009-06-04 49 views
175

例如: 下面的代码是否对JSON Spec有效?JSON规范 - 密钥是否必须用引号括起来?

{ 
    precision: "zip" 
} 

或者我应该总是使用下面的语法? (如果是这样,为什么?)

{ 
    "precision": "zip" 
} 

我还没有真正在JSON规范中找到关于此的东西。虽然他们在他们的例子中使用了引号。 (所以我现在要这样做)

回答

117

是的,你需要引号。这是为了使它更简单,并避免必须有另一个用于javascript保留关键字的转义方法,即{for:"foo"}

+8

在很多情况下,引号并不简单,例如手动编辑的配置文件。关于JSON被使用(和滥用)作为几乎通用的交换格式的不幸之处在于它具有特定于Javascript的功能。 – miguel 2015-01-13 22:56:47

+5

真正的原因 - 也检查这个答案 - http://stackoverflow.com/questions/4201441/is-there-any-practical-reason-to-use-quoted-strings-for-json-keys – TechMaze 2015-07-01 00:07:00

120

你是正确的使用字符串作为关键。下面是从RFC 4627的摘录 - 为JavaScript对象符号(JSON)

2.2应用程序/ JSON的媒体类型。对象

对象结构被表示为围绕零个或多个名称/值对(或成员)的一对大括号 。 名称是 字符串。每个名称后面都会出现一个冒号,将名称分隔为 。一个逗号将一个值与以下的名称分开。对象内的名称应该是唯一的。

object = begin-object [ member *(value-separator member) ] end-object

member = string name-separator value

[...]

2.5。字符串

字符串的表示与编程语言系列中使用的约定类似。一个字符串以 引号开头和结尾。 [...]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

阅读全文RFC here

+8

并完成思想,第2.5节说:“一个字符串以引号开头和结尾。 – rakslice 2013-09-26 01:42:10

11

2.2。对象

对象结构表示为围绕零个或多个名称/值对(或成员)的一对大括号。名称是一个字符串。

and from 2.5。字符串

一个字符串以引号开头和结尾。

所以,我要说的是,根据标准:是的,你应该总是引用键(虽然有些解析器可能更宽容)

-2

既然你可以把“parent.child”点符号,你不必把父母[“孩子”]这也是有效和有用的,我会说这两种方式在技术上是可以接受的。解析器都应该以两种方式完成。如果你的解析器不需要引号,那么最好不要放它们(节省空间)。把它们称为字符串是有道理的,因为它们就是它们的原因,并且由于方括号给了你使用键的值的能力,所以它本质上是不合理的。 JSON中,你可以把...

>var keyName = "someKey"; 
>var obj = {[keyName]:"someValue"}; 

>obj 
Object {someKey: "someValue"} 

没有问题就好了,如果你需要一个价值的关键,没有报价将无法正常工作,因此,如果没有,你不能,那么你不会这样“你不需要在键上引用”。即使说技术上是字符串是正确的。逻辑和用法反驳。在我们的示例中,从任何浏览器的控制台运行obj也不会正式输出Object {“someKey”:“someValue”}。

相关问题