JSON规范 – 密钥必须用引号括起来吗?

示例:以下代码是否针对JSON规范有效?

{ precision: "zip" } 

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

 { "precision": "zip" } 

在JSON规范中,我还没有真正find这方面的东西。 虽然他们在他们的例子中使用引号。 (所以我现在也要这样做)

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

你是正确的使用string作为关键。 这里是RFC 4627的一个摘录– 用于JavaScript对象表示法(JSON)的application / json媒体types

2.2。 对象

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

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

member = string name-separator value

[…]

2.5。 string

string的表示类似于C系列编程语言中使用的约定。 一个string以引号开头和结尾。 […]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

在这里阅读整个RFC。

2.2开始。 对象

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

2.5。 string

一个string以引号开头和结尾。

所以我会按照标准来说:是的,你应该总是引用关键字(尽pipe一些parsing器可能更宽容)

是的,报价是强制性的。 http://json.org/说:;

 string "" " chars " 

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

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

只要没有问题,如果你需要一个关键的价值,没有报价将无法正常工作,所以如果没有,你不能,所以你不会这样“你不需要引号的关键”。 即使说技术上是string是正确的。 逻辑和用法辩论,否则。 在我们的示例中,从任何浏览器的控制台运行obj也不会正式输出Object {“someKey”:“someValue”}。