JSON键必须用引号括起来吗?

< p >的例子: 下面的代码对JSON规范有效吗?< / p >
{
precision: "zip"
}

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

{
"precision": "zip"
}

我还没有在JSON规范中找到关于这方面的东西。尽管他们在例子中用引号括键。

105854 次浏览

是的,引号是必须的。http://json.org/说:

string
""
" chars "

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

使用字符串作为键是正确的。下面是用于JavaScript对象表示法(json)的application/json媒体类型的节选

2.2. 对象

对象结构用一对花括号表示 包围零个或多个名称/值对(或成员)。名称为A 字符串> < /强。每个名称后面都有一个冒号,分隔名称 从值。一个逗号将值与后面的字符分隔开 的名字。一个对象中的名称必须是唯一的

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

member = string name-separator value

[…]

2.5. 字符串

字符串的表示类似于C . bb0中使用的约定 编程语言家族。字符串以…开始和结束 引号。[…]< / p >

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

阅读整个RFC 在这里

2.2. 对象

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

2.5. 字符串

字符串以引号开始和结束。

因此,我会说,根据标准:是的,您应该始终引用键(尽管一些解析器可能更宽容)

既然你可以把"parent. "你不必写parent["child"],这也是有效和有用的,我想说两种方法在技术上都是可以接受的。解析器都可以以两种方式正常工作。如果您的解析器不需要在键上加引号,那么最好不要加引号(节省空间)。称它们为字符串是有意义的,因为它们就是这样,由于方括号让你能够使用值作为键,本质上它完全有意义不这样做。 在Json中,你可以放入…

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


>obj
Object {someKey: "someValue"}

这很好,没有问题,如果你需要一个键的值,没有引号是行不通的,所以如果它没有,你不能,所以你不会所以“你不需要对键加引号”。即使严格来说它们是字符串。逻辑和用法却不这么认为。它也没有正式输出Object {"someKey": "someValue"},在我们的例子中,从任何浏览器的控制台运行的obj。

是的,他们有。但如果需要其他方法,则签出JSON5

JSON5是JSON的超集,允许使用ES5语法,包括:

  • 非挂牌属性键
  • 单引号,转义和多行字符串
  • 备选号码格式
  • 评论
  • 多余的空格

JSON5引用实现(json5 npm包)提供了一个JSON5对象,该对象具有parsestringify方法,其参数和语义与内置的JSON对象相同。

在你的情况下,它们都是有效的,这意味着它们都将起作用。

然而,你仍然应该在键名中使用带引号的键名,因为它更像传统的,这使得键名更简单,也更能使用空格等。

因此,请使用带引号的那个。

编辑//检查这个:JSON和对象文字表示法的区别是什么?