何时可以在JSON中省略引号?

时间:2013-07-14 17:30:00

标签: json

它似乎是JSON最好的秘密之一:你究竟能在字符串周围省略引号 - 你还应该使用什么引号(单引号或双引号)?

JSON standard非常明确:使用双引号,并始终使用它们。然而似乎没有人遵循这一点,解析器看起来一般都很好。

例如,JSON文档中的键通常似乎不需要引号。 (我猜这是因为解析器可以假设密钥必须是字符串文字)。但这是一个实际的规则吗?还有其他这样的规则吗?它们是特定于解析器还是特定于语言?

请注意,虽然问题是关于JSON,但这包括在给定编程语言中表达JSON对象的标准方法。如果某种语言(例如JavaScript)具有偏离JSON标准的官方规则,那么查看它们将会很有帮助。

2 个答案:

答案 0 :(得分:5)

从不。删除引号在JavaScript代码中的文字中是合法的,但在JSON中是非法的。字符串总是被引用,键始终是字符串。可能存在“Lax JSON”解析器,它接受带有不带引号的密钥或其他东西的非法JSON,但这并不会改变这样的事实,即它是非法的JSON,并且没有所需的JSON解析器接受它

答案 1 :(得分:3)

删除JSON对象键中的引号是Javascript语言的一个特性,可能还有其他语言。例如,Python的字典语法与Javascript非常相似,只是键名不能不加引号(尽管它们可以是单引号,但它们不需要是字符串)。 / p>

可能与此问题重复:JSON Spec - does the key have to be surrounded with quotes? 这一个:What is the difference between object keys with quotes and without quotes?

这两个问题都没有解决这个是Javascript规范中的问题,还是大多数浏览器都允许的问题。我在ECMAScript官方规范中找到了这个:

第一个定义了一个对象文字,其中PropertyNameAndValue可以是StringLiteral或IdentifierLiteral。第二个定义了IdentifierLiteral,它没有引号。

所以,是的,Javascript中正式允许使用不带引号的属性名称。