例如: 下面的代码是否对JSON Spec有效?JSON规范 - 密钥是否必须用引号括起来?
{
precision: "zip"
}
或者我应该总是使用下面的语法? (如果是这样,为什么?)
{
"precision": "zip"
}
我还没有真正在JSON规范中找到关于此的东西。虽然他们在他们的例子中使用了引号。 (所以我现在要这样做)
例如: 下面的代码是否对JSON Spec有效?JSON规范 - 密钥是否必须用引号括起来?
{
precision: "zip"
}
或者我应该总是使用下面的语法? (如果是这样,为什么?)
{
"precision": "zip"
}
我还没有真正在JSON规范中找到关于此的东西。虽然他们在他们的例子中使用了引号。 (所以我现在要这样做)
是的,你需要引号。这是为了使它更简单,并避免必须有另一个用于javascript保留关键字的转义方法,即{for:"foo"}
。
是的,引号是强制性的。 http://json.org/说:
string
""
" chars "
你是正确的使用字符串作为关键。下面是从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。
并完成思想,第2.5节说:“一个字符串以引号开头和结尾。 – rakslice 2013-09-26 01:42:10
从2.2。对象
对象结构表示为围绕零个或多个名称/值对(或成员)的一对大括号。名称是一个字符串。
and from 2.5。字符串
一个字符串以引号开头和结尾。
所以,我要说的是,根据标准:是的,你应该总是引用键(虽然有些解析器可能更宽容)
既然你可以把“parent.child”点符号,你不必把父母[“孩子”]这也是有效和有用的,我会说这两种方式在技术上是可以接受的。解析器都应该以两种方式完成。如果你的解析器不需要引号,那么最好不要放它们(节省空间)。把它们称为字符串是有道理的,因为它们就是它们的原因,并且由于方括号给了你使用键的值的能力,所以它本质上是不合理的。 JSON中,你可以把...
>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};
>obj
Object {someKey: "someValue"}
没有问题就好了,如果你需要一个价值的关键,没有报价将无法正常工作,因此,如果没有,你不能,那么你不会这样“你不需要在键上引用”。即使说技术上是字符串是正确的。逻辑和用法反驳。在我们的示例中,从任何浏览器的控制台运行obj也不会正式输出Object {“someKey”:“someValue”}。
在很多情况下,引号并不简单,例如手动编辑的配置文件。关于JSON被使用(和滥用)作为几乎通用的交换格式的不幸之处在于它具有特定于Javascript的功能。 – miguel 2015-01-13 22:56:47
真正的原因 - 也检查这个答案 - http://stackoverflow.com/questions/4201441/is-there-any-practical-reason-to-use-quoted-strings-for-json-keys – TechMaze 2015-07-01 00:07:00