例子: 下面的代码对JSON规范有效吗?

{
    precision: "zip"
}

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

{
    "precision": "zip"
}

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


当前回答

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

其他回答

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

但是,您仍然应该在键名中使用带引号的键名,因为它更常规,这将使键名更简单,并且能够使用带有空格的键名等。

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

JSON和对象文字表示法的区别是什么?

从2.2。对象

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

从2.5开始。字符串

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

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

如果使用JSON5就不会

对于常规JSON, yes键必须被引用。但如果你需要其他的,签出广泛使用的JSON5,之所以这样命名是因为它是JSON的超集,允许ES5语法,包括:

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

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

被许多高知名度的项目广泛使用和依赖

JSON5开始于2012年,截至2022年,现在每周有6500万次下载,在npm最依赖的包中排名前0.1%,并已被诸如Chromium, Next.js, Babel, Retool, WebStorm等主要项目采用。它在MacOS和iOS等苹果平台上也有原生支持。 ~ json5.org主页

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

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

string
    ""
    " chars "