The JSON5 Data Interchange Format is a proposed extension to JSON that aims to make it easier for humans to write and maintain by hand. It does this by adding some minimal syntax features directly from ECMAScript 5.1.
From: Standard JSON5java
JSON(JavaScript Object Notation),一种轻量级的数据交换格式,源于JavaScript,为ECMAScript的一个子集。其易于阅读和编写、易于编码和解析等特性,已被普遍应用于尤为配置及http下的序列化等众多方面。git
JSON5是对JSON的扩展,其目的是可以让人们(程序猿)更加容易的阅读和编写。
按照官方介绍,JSON5相对于JSON增长了如下特性(优点) summary-of-features:github
对象:spring
{ success: true, 'msg': "OK" }
数组:编程
[1, 2, 3, 4,]
字符串:json
{ name: 'ManerFan', addr: 'KunMing Road,\ ShannXi,\ China', nickname: '\u5c0f\u5e08\u59b9' }
数字:后端
Infinity
, -Infinity
, NaN
+
{ intNum: +123, doubleNum: -.25e2, infNum: Infinity, nanNum: NaN, bigInt: 0x14FFFFFFFFFFFFFFFFFF }
注释:数组
/** * json5 * json for humans */ { // 姓名 name: 'ManerFan', sex: 'male' // 性别 }
从编程语言方面讲,目前实现最为完善、维护最为频繁的仍是js,目前json5已被普遍应用于NodeJS的先后端应用。springboot
在GitHub上搜索json5,各语言的repo数以下图编程语言
因而,便萌生了编写解析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,欢迎围观