示例:以下代码对JSON Spec有效吗?
{ precision: "zip" }
或者我应该总是使用下面的语法吗?(如果是,为什么?)
{ "precision": "zip" }
我在JSON规范中还没有找到这方面的内容,尽管在示例中他们在键的两边使用了引号。
ddhy6vgd1#
是的,你需要引号,这是为了使它更简单,并且避免对javascript保留关键字(即{for:"foo"})使用另一种转义方法。
{for:"foo"}
lztngnrs2#
使用字符串作为密钥是正确的。以下是 *RFC 4627 -JavaScript对象表示法(JSON)的应用程序/json媒体类型 * 的摘录2.2.对象对象结构表示为一对花括号,括起零个或多个名称/值对(或成员)。名称是一个字符串。每个名称后面有一个冒号,将名称与值分隔开。一个逗号将值与后面的名称分隔开。对象中的名称应该是唯一的。第一个月member = string name-separator value[...]2.5.字符串字符串的表示类似于C族编程语言中使用的约定。字符串以引号开始和结束。[...]string = quotation-mark *char quotation-markquotation-mark = %x22 ; "阅读整个RFC here。
member = string name-separator value
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
2hh7jdfx3#
来自2.2.对象对象结构表示为一对花括号,括起零个或多个名称/值对(或成员)。名称是字符串。以及2.5中的字符串字符串以引号开始和结束。所以我会说,按照标准:是的,你应该总是引用关键字(虽然有些解析器可能更宽容)
83qze16e4#
是的,必须使用引号。http://json.org/表示:
string "" " chars "
ig9co6j15#
是的。但是如果你需要其他的东西,请检查JSON 5。JSON5是JSON的超集,支持ES 5语法,包括:
JSON 5参考实现(json5 npm package)提供了一个JSON5对象,该对象具有parse和stringify方法,这些方法的参数和语义与内置的JSON对象相同。JSON 5用于许多高端项目:JSON 5于2012年推出,截至2022年,每周下载量超过6500万次,在npm上最受依赖的软件包中排名前0.1%,并被Chromium、Next.js、Babel、Retool、WebStorm等大型项目采用,在MacOS和iOS等苹果平台上也得到了原生支持。~ json5.org主页
json5
JSON5
parse
stringify
JSON
mznpcxlj6#
在您的情况下,这两种方法都是有效的,这意味着这两种方法都将起作用。但是,您仍然应该在键名中使用带引号的键名,因为它更传统,这会使键名更简单,并且可以使用白色等。因此,请使用带引号的那个。编辑//检查此:What is the difference between JSON and Object Literal Notation?
ua4mk5z47#
既然你可以使用“parent.child”点标记,而你不必使用parent[“child”],这也是有效和有用的,我想说这两种方式在技术上都是可以接受的。解析器应该可以很好地使用这两种方式。如果你的解析器不需要在键上加引号,那么最好不要加引号(节省空间)。称它们为字符串是有意义的,因为它们就是字符串,而且由于方括号本质上给了你使用键的值的能力,所以不这样做是完全有意义的。在Json中你可以把...
>var keyName = "someKey"; >var obj = {[keyName]:"someValue"}; >obj Object {someKey: "someValue"}
如果你需要一个键的值,没有引号就不行,所以如果不行,你就不能,所以你就不会这么做,所以“你不需要在键上加引号”。即使说它们在技术上是字符串是正确的。逻辑和用法却不这么认为。它也没有正式输出Object {“someKey”:示例中obj的“someValue”}从任何浏览器的控制台运行。
7条答案
按热度按时间ddhy6vgd1#
是的,你需要引号,这是为了使它更简单,并且避免对javascript保留关键字(即
{for:"foo"}
)使用另一种转义方法。lztngnrs2#
使用字符串作为密钥是正确的。以下是 *RFC 4627 -JavaScript对象表示法(JSON)的应用程序/json媒体类型 * 的摘录
2.2.对象
对象结构表示为一对花括号,括起零个或多个名称/值对(或成员)。名称是一个字符串。每个名称后面有一个冒号,将名称与值分隔开。一个逗号将值与后面的名称分隔开。对象中的名称应该是唯一的。
第一个月
member = string name-separator value
[...]
2.5.字符串
字符串的表示类似于C族编程语言中使用的约定。字符串以引号开始和结束。[...]
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
阅读整个RFC here。
2hh7jdfx3#
来自2.2.对象
对象结构表示为一对花括号,括起零个或多个名称/值对(或成员)。名称是字符串。
以及2.5中的字符串
字符串以引号开始和结束。
所以我会说,按照标准:是的,你应该总是引用关键字(虽然有些解析器可能更宽容)
83qze16e4#
是的,必须使用引号。http://json.org/表示:
ig9co6j15#
是的。但是如果你需要其他的东西,请检查JSON 5。
JSON5是JSON的超集,支持ES 5语法,包括:
JSON 5参考实现(
json5
npm package)提供了一个JSON5
对象,该对象具有parse
和stringify
方法,这些方法的参数和语义与内置的JSON
对象相同。JSON 5用于许多高端项目:
JSON 5于2012年推出,截至2022年,每周下载量超过6500万次,在npm上最受依赖的软件包中排名前0.1%,并被Chromium、Next.js、Babel、Retool、WebStorm等大型项目采用,在MacOS和iOS等苹果平台上也得到了原生支持。
~ json5.org主页
mznpcxlj6#
在您的情况下,这两种方法都是有效的,这意味着这两种方法都将起作用。
但是,您仍然应该在键名中使用带引号的键名,因为它更传统,这会使键名更简单,并且可以使用白色等。
因此,请使用带引号的那个。
编辑//检查此:What is the difference between JSON and Object Literal Notation?
ua4mk5z47#
既然你可以使用“parent.child”点标记,而你不必使用parent[“child”],这也是有效和有用的,我想说这两种方式在技术上都是可以接受的。解析器应该可以很好地使用这两种方式。如果你的解析器不需要在键上加引号,那么最好不要加引号(节省空间)。称它们为字符串是有意义的,因为它们就是字符串,而且由于方括号本质上给了你使用键的值的能力,所以不这样做是完全有意义的。在Json中你可以把...
如果你需要一个键的值,没有引号就不行,所以如果不行,你就不能,所以你就不会这么做,所以“你不需要在键上加引号”。即使说它们在技术上是字符串是正确的。逻辑和用法却不这么认为。它也没有正式输出Object {“someKey”:示例中obj的“someValue”}从任何浏览器的控制台运行。