JSON 格式可以说是目前最流行的数据传输格式了,被广泛应用于前后端通信,尤其是在 SPA 应用中,JSON 数据通过 HTTP 协议进行传输,具有体积小、易序列化、可读性好等优点。(当然,这些优点是相对的,例如体积小是相对于 XML 而言的,如果跟 protobuf 比,那体积就大多了。)
JSON 虽好,但是仍有两大痛点让开发者苦恼不已:
- 不能添加注释(这个不能忍)
- 序列化之后的 key 被加上了双引号(体积变大了)
如何添加注释
目前的标准是不能添加注释,如果想添加的话,只能曲线救国了,例如我是这么干的:
{ "----------base----------": "通用模块变量定义", "common": { "object_not_exit": "对象 ${id} 不存在!", "invalid_username_or_password": "用户名或密码错误!" }, "----------sms----------": "短信模块相关变量", "sms": { "template_missing_parameters": "模板缺少变量!", "param_length_limit": "参数超出长度限制!" } }
总结下来一般有下面三种方法:
1、使用约定的 key 作为注释字段:
如以 //, _comment,#####,—--— (# 或 - 的个数自定) 作为注释的 key 等。
2、使用重名 key 作为注释:
即每个 key,使用两次,第1次做注释,第2次做实际属性。
3、使用字段 key 加前缀做注释 key:
常用的前缀有 #, _ 等。
能否去掉 key 中的双引号
序列化之后的 key 被加上了双引号,例如:
const obj = { name: 'keliq', age: 12 } console.log(JSON.stringify(obj)) // {"name":"keliq","age":12}
仔细观察可以发现,对象的 key 是没有双引号的,但是序列化之后,两边都被加上了引号,导致字符数量变多了,那问题就来了:
- 为什么要给 key 加双引号?
- 能不能去掉 key 里面的双引号?
这里先说一个历史背景:
在 ECMAScript 3 中,保留字是不能作为对象的 key 的,例如: {function: 0} // 语法错误 {if: 0} // 语法错误 {true: 0} // 语法错误 只能给 key 添加双引号或单引号: {"function": 0} // Ok {"if": 0} // Ok {"true": 0} // Ok
但是在 ES5 之后,保留字也是可以作为 key 的了,因此在不考虑向后兼容的情况下,如果能把 JSON 对象表示成跟 JavaScript 对象一模一样,只是把中间的空格、换行等删掉该多好呀!
强大的 JSON5
你想要的,它都有!这就是 JSON5 标准,它有以下特性:
对象
对象的 key 可以跟 JavaScript 中对象 key 完全一致
末尾可以有一个逗号
数组
末尾可以有一个逗号
字符串
- 字符串可以用单引号
- 字符串可以用反引号
- 字符串可以用转义字符
数字
- 数字可以是 16 进制
- 数字可以用点开头或结尾
- 数字可以表示正无穷、负无穷和NaN.
- 数字可以用加号开头
评论
支持单行和多行注释
空格
允许多余的空格
可以看到,JSON5 比 JSON 强大很多,是 JSON 的超集,就好比 TypeScript 相较于 JavaScript。安装方法为:
npm install json5 # 或者 yarn add json5
序列化示例:
const JSON5 = require('json5') const obj = { name: 'keliq', age: 12, } const res = JSON5.stringify(obj) console.log(res) // {name:'keliq',age:12}
反序列化示例:
const JSON5 = require('json5') const json5str = `// 单行注释 { name:'keliq', // 这是姓名 age:12, /*这是年龄*/ }` console.log(JSON5.parse(json5str))
看到这里,不禁感叹,这才是 JSON 应该有的样子!你说呢?
JSON5,使用
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]