JSON5 中文文档

JSON5是什么?

JSON(JavaScript Object Notation),一种轻量级的数据交换格式,源于JavaScript,为ECMAScript的一个子集。其易于阅读和编写、易于编码和解析等特性,已被广泛应用于尤其配置及http下的序列化等众多方面。

JSON5是对JSON的扩展,其目的是能够让人们(程序猿)更加容易的阅读和编写。按照官方介绍,JSON5相对于JSON增加了以下特性(优势) 

summary-of-features:https://spec.json5.org

对象:

  • 属性key可以不使用引号包含

  • 属性key可以使用单引号包含

{
    success: true,
    'msg': "OK"
}

数组:

  • 可以在尾部有多余逗号

[1, 2, 3, 4,]

字符串:

  • 可以以单引号包含

  • 支持多行字符串

  • 可以包含转义字符

{
    name: 'ManerFan',
    addr: 'KunMing Road,\
        ShannXi,\
        China',
    nickname: '\u5c0f\u5e08\u59b9'
}

数字:

  • 可以使用16进制表示

  • 可以以小数点开头或结尾

  • 支持 Infinity-InfinityNaN

  • 可以显示声明 +

{
    intNum: +123,
    doubleNum: -.25e2,
    infNum: Infinity,
    nanNum: NaN,
    bigInt: 0x14FFFFFFFFFFFFFFFFFF
}

注释:

  • 支持单行/多行注释

/**
 * json5
 * json for humans
 */

{
    // 姓名
    name: 'ManerFan',
    sex: 'male' // 性别
}

解析

从编程语言方面讲,目前实现最为完善、维护最为频繁的还是js,目前json5已被广泛应用于NodeJS的前后端应用。在GitHub上搜索json5,各语言的repo数如下图

609300293-5b86906bc6605_articlex.png

于是,便萌生了编写解析json5代码的想法参考tnjson,使用kotlin编写,已将代码开源至 manerfan-springboot-starter-json5

同时,在JSON5协议的基础上,对数字做了进一步扩展,支持使用下划线_对数字进行分隔

{
    // 整型
    "intDec": +123_456, /* 10进制 */ intHex: 0x1a_FFfF, /* 16进制 */
    // 长整型
    longDec: 1_234_567_890, longHex: -0X1F_ffff_aBcD_EfeF,
    // 浮点型
    double1: .234, double2: +1.2e-2, double3: -5.6E3,
    // 大整型
    bigintDec: 123_456_789_123_456_789_123_456, bigintHex: -0xABC_FFFF_FFFF_FFFF_FFFF
}

有了kotlin语言的加持,便可以写出这样的语句

"""
    {
        // 整型
        "intDec": +123_456, /* 10进制 */ intHex: 0x1a_FFfF, /* 16进制 */
        // 长整型
        longDec: 1_234_567_890, longHex: -0X1F_ffff_aBcD_EfeF,
        // 浮点型
        double1: .234, double2: +1.2e-2, double3: -5.6E3,
        // 大整型
        bigintDec: 123_456_789_123_456_789_123_456, bigintHex: -0xABC_FFFF_FFFF_FFFF_FFFF
    }
""".trimIndent().parseMap()
"""
    {
        str: 'Hello Json5!',
        num: -12_345,
        doubleNum: .3e-2,
        sub: {
            str:'
                \u4f60\u597d
                不要闹!
                ',
            array: [123_456_789_123_456_789_123_456, -0xABC_FFFF_FFFF_FFFF_FFFF]
        }
    }
""".trimIndent().parseObject(Obj::class.java)

更多示例见 json5-demo,欢迎围观

参考

  1. Standard JSON5

  2. JSON for Humans

  3. GitHub - tnjson

  4. https://segmentfault.com/a/1190000016199847

未经允许请勿转载:程序喵 » JSON5 中文文档

点  赞 (1) 打  赏
分享到: