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

{
    precision: "zip"
}

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

{
    "precision": "zip"
}

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


当前回答

从2.2。对象

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

从2.5开始。字符串

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

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

其他回答

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

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

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

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

使用字符串作为键是正确的。以下是来自RFC 4627 - JavaScript对象表示法(json)的应用程序/json媒体类型

2.2. Objects An object structure is represented as a pair of curly brackets surrounding zero or more name/value pairs (or members). A name is a string. A single colon comes after each name, separating the name from the value. A single comma separates a value from a following name. The names within an object SHOULD be unique. object = begin-object [ member *( value-separator member ) ] end-object member = string name-separator value [...] 2.5. Strings The representation of strings is similar to conventions used in the C family of programming languages. A string begins and ends with quotation marks. [...] string = quotation-mark *char quotation-mark quotation-mark = %x22 ; "

在这里阅读整个RFC。

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

从2.2。对象

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

从2.5开始。字符串

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

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

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

string
    ""
    " chars "