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);

参考资料

https://github.com/json5/json5

http://json5.org


脉冲云_梁兴臣
616 声望194 粉丝

脉冲云CTO,JS全栈开发,DevOps实施,开发体验优化,开发效率提升