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,歡迎圍觀