为什么在JSON中不允许注释?

为什么在JSON中不允许注释?


我知道的每种标记或数据交换格式都支持注释的定义。仅有一个例外:JSON。

这些天,我经常处理JSON。最近,许多开发人员更喜欢JSON,而不是已经存在了一段时间的更复杂的XML。这就是为什么在JSON中而不是XML中实现REST -API 的普遍做法。JSON文档的另一个常见用例是各种软件系统的配置。我经常需要对此类JSON文档的某些行进行注释。也许只是为了澄清我的意图或为以后做一些笔记。

如果您大量使用JSON,那么一旦您可以对某些属性,特定值等进行注释,那将是一个很棒的选择。由于JSON是JavaScript的子集,因此人们可以认为它会允许使用本示例中的注释:

{
  "key": "value" // comment
}

但事实并非如此。在JSON网站并没有太多说的这个情况。在相应的RFC确实没有。据说发现了JSON的Douglas Crockford 在他的演讲“ JSON Saga”中给出了答案。他说,一开始,你被允许使用// comments after a double slash,以及/* block comments */在JSON。后来,他决定删除对评论的支持,原因有以下三个:

危险行为

“人们在注释中向解析器添加指令,这确实是一件坏事,因为这将完全破坏互操作性,因为整个元语言水平并不常见,而这超出了标准。”

不必要的复杂性

“ […]对于其他语言的某些移植,做事的复杂性的一半左右只是在做评论[…]”

与YAML保持一致

我真的不认为这些是删除注释之类的典型内容的正当理由,但至少有此决定的理由。

有两种方法可以解决缺少评论的问题(除了感到沮丧和将其排除在外)。

您可以在保留周围对象注释的特殊属性上达成一致。例如:

{
  "key": "value",
  "__comment": "defines a key and a value"
}

或者,您可以使用另一种支持注释的标记格式。例如XML,YAML或较新的HOCON(人为优化配置对象表示法)。

就我个人而言,我认为YAML是一个过时的规范,HOCON优选用于配置软件系统。有时,将XML引入客户端Web应用程序可能是一个真正的难题,因此JSON中的注释通常是唯一的解决方案。

翻译至----保罗·沃巴赫(Paul Vorbach), 2013-03-13

展开阅读全文

Windows版YOLOv4目标检测实战:训练自己的数据集

04-26
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值