JSON文件加注释的7种方法
缺省不能加注释,现实有需求
根据JSON规范(http://www.json.org, RFC 4627, RFC 7159),不支持注释。JSON规范之所以不允许加注释,主要是防止:过多的注释,影响了文件本身的数据载体的目的。
但是有些场合,尤其是配置文件,还是希望能够帮助说明数据项的含义。一方面有利于描述接口,另一方面能够减少重复性的文档。这在软件快速开发实践中有一定意义。
JSON中加注释具有现实需求 以下介绍几种给JSON文件加注释的方法。
方法一:直接用json-schema,使用规范中的注释字段
在json-schema规范中数据结构定义JSON中有一些说明性字段(Annotation),这些字段对应的key有title, description, $comment, default, examples等,可以在这些字段(一般1个即可)中填写某个数据项的含义与用法。这个方案的优点是功能强大,缺点是json-schema与json数据本身还是分离的。
http://json-schema.org/ ,规范网站
https://github.com/epoberezkin/ajv ,著名Javascript实现
方法二:使用JSON5规范
JSON5规范允许在JSON文件中加入注释:单行注释,多行注释均可
可以使用npm的json5库,用法与JSON库类似。JSON5规范见:https://json5.org/
json5格式直接支持注释 方法三:使用去注释的库
可以使用npm的strip-json-comments库。支持去掉行注释与块注释,然后再可以用标准的JSON.parse解析strip-json-comments库见:https://github.com/sindresorhus/strip-json-comment
方法四:使用约定俗成的key作为注释字段
如以"//"作为注释的key. 但是如果有多个以"//"为key的属性,是否符合协议的?答案是:协议理论上不允许。实现上(几乎?)所有的JS环境都允许,解析之后,只保留最后一项常用的类似key还有: "_comment", "#####"("#"个数自定)等
特殊约定的key可以作为注释的标志 方法五:使用重名key作为注释。
即每个key,使用两次,第1次做注释,第2次做实际属性。原理在方法四中已经介绍:协议理论上不允许。实现上(几乎?)所有的JS环境都允许,解析之后,只保留最后一项
同个key使用2次,1次作为注释 方法六:使用字段key加前缀做注释key
例如加入属性的key是xyz, 则?xyz作为注释字段。这样的好处是,没有重名的字段,完全符合JSON协议。常用的前缀还有"#", "_", "__"等
给key加前缀作为注释的标志 方法七:使用支持注释的配置文件管理模块
如npm中rc库(见:https://github.com/dominictarr/rc),或者config(见:https://github.com/lorenwest/node-config)
缺点是,只能用于配置相关的Json文件。使用方法需要依照模块的要求。