4

这似乎是 JSON 最保守的秘密之一:什么时候可以省略字符串周围的引号 - 以及无论如何应该使用哪些引号(单引号或双引号)?

JSON 标准对此非常清楚:使用双引号,并始终使用它们。然而似乎没有人遵循这一点,而解析器似乎通常对此很好。

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

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

4

2 回答 2

6

绝不。删除引号在 JavaScript 代码中的文字中是合法的,但在 JSON 中是非法的。字符串总是被引用,键总是字符串。“Lax JSON”解析器可能存在接受带有未引用键或其他内容的非法 JSON,但这并不会改变它本身是非法 JSON 的事实,并且不需要 JSON 解析器接受它。

于 2013-07-14T18:18:21.803 回答
3

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

可能是这个问题的重复:JSON Spec - 键必须用引号括起来吗? 还有这个:带引号和不带引号的对象键有什么区别?

两者都没有解决这是否在 Javascript 规范中,或者大多数浏览器是否允许的问题。我在官方的 ECMAScript 规范中发现了这一点:

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

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

于 2013-07-14T17:36:35.457 回答