Answers:
是的,您需要引号。这是为了使其更简单,并且避免了对javascript保留关键字必须使用另一种转义方法{for:"foo"}
。
您正确使用字符串作为键。这是RFC 4627的摘录-JavaScript对象符号(JSON)的application / json媒体类型
2.2。对象
一个对象结构表示为一对大括号,包围着零个或多个名称/值对(或成员)。 名称是一个字符串。每个名称后都有一个冒号,将名称与值分开。单个逗号将值与后面的名称分开。对象中的名称应唯一。
object = begin-object [ member *( value-separator member ) ] end-object
member = string name-separator value
[...]
2.5。弦乐
字符串的表示类似于C系列编程语言中使用的约定。字符串以引号开头和结尾。[...]
string = quotation-mark *char quotation-mark
quotation-mark = %x22 ; "
在此处阅读整个RFC 。
A string begins and ends with quotation marks.
。
是的,引号是强制性的。http://json.org/说:
string
""
" chars "
是的,他们愿意。但是,如果您另有需要,请签出JSON5。
JSON5是JSON的超集,它支持ES5语法,包括:
JSON5参考实现(json5
npm package)提供了一个JSON5
对象,该对象具有parse
和stringify
方法与内置JSON
对象相同的args和语义。
由于您可以将“ parent.child”添加为点分表示法,而不必放入同样有效且有用的parent [“ child”],因此我认为两种方法在技术上都是可以接受的。解析器都应该同时做两种方式。如果您的解析器不需要键上的引号,那么最好不要放置引号(节省空间)。之所以称它们为字符串是因为它们就是它们,并且由于方括号使您能够使用键的值,因此从根本上说是很有意义的。在Json中,您可以放...
>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};
>obj
Object {someKey: "someValue"}
没问题,如果您需要一个键的值而没有被引用的行将不起作用,那么它就没问题了,因此,如果没有,则不会,所以您不会这样,“您不需要键上的引号”。即使正确地说它们在技术上是字符串。逻辑和用法则相反。在我们的示例中,它也没有从任何浏览器的控制台中正式输出obj的Object {“ someKey”:“ someValue”}。
obj
在控制台中键入内容时,浏览器将显示一些易于理解的对象表示形式。它可以将其显示为对象文字(如您在示例中所做的那样),也可以使用其他表示形式,甚至是交互式表示形式。如果键是有效标识符而不是保留字,则JavaScript对象文字不需要键名周围的引号。但是,JSON 始终要求在键名周围加上引号。
obj
,请尝试在而不是在控制台中输入JSON.stringify(obj)
。现在,您将看到该对象的有效JSON表示形式,并带有引用的键名。相反,要查看字符串是否为有效的JSON,请尝试JSON.parse(string)
。如果没有引号,这将引发异常。例如,JSON.parse('{"a":"b"}')
将成功,但JSON.parse('{a:"b"}')
将失败。
var obj = {[keyName]:"someValue"};
非常有趣!我不知道您可以使用JavaScript对象文字来实现。一点点检查表明这是ES6中的新功能-您无法在ES5中做到这一点。