NPM酷库,每天两分钟,了解一个流行NPM库。·
JSON是JS中数据交换时最常用的数据格式,其序列话和反序列化性能非常好,但是其语法却比较严格,比如以下是一个合法的JS声明,却不是一个合法的JSON:
{ foo: 'bar' }
JSON格式强制要求对象key必须以双引号包含,字符串也必须使用双引号,等等。
如果我们只是调用 JSON.stringify()
和 JSON.parse()
来进行数据的处理,那么也没什么关系,但是如果我们需要手写JSON,比如写配置文件或数据模式定义,那么严格的JSON语法检查会给编码带来很多不便。
JSON5
JSON5 是一个JSON格式的扩展,目的是能够让人类更容易读写数据文件。JSON5只是一个第三方的库,并非JSON格式的继任者。JSON5相对于JSON,有如下各个方面优势。
对象:
- 属性key可以不用引号包含
- 属性key可以用单引号包含
- 可以有尾部多余逗号
数组:
- 可以有尾部多余逗号
字符串:
- 可以以单引号包含
- 支持多行字符串
数字:
- 可以以16进制表示
- 可以以小数点开头或结尾
- 支持
Infinity
,-Infinity
,NaN
, 和-NaN
. - 可以显式声明正号
+
注释:
- 允许当行和多行注释
如下就是一个合法的JSON5格式文件:
{
foo: 'bar',
while: true,
this: 'is a \
multi-line string',
// this is an inline comment
here: 'is another', // inline comment
/* this is a block comment
that continues on another line */
hex: 0xDEADbeef,
half: .5,
delta: +10,
to: Infinity, // and beyond!
finally: 'a trailing comma',
oh: [
"we shouldn't forget",
'arrays can have',
'trailing commas too',
],
}
处理JSON5数据:
const JSON5 = require('json5');
let obj = JSON5.parse('{unquoted:"key",trailing:"comma",}');
let str = JSON5.stringify(obj);