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”}。