2014年8月22日星期五

宣布 JKSN,又一个 JSON 兼容二进制压缩格式

本来只是想可不可以用二进制来储存 JSON 并且做一些优化之类的,结果造出来 JKSN 这货。
比较了一下文件大小,发现没有经过压缩的 JKSN 数据比 gzip -9 JSON 还要小。于是把 JKSN 的目标定为让 JSON 序列更小。

JKSN 适用于任何网络带宽比处理时间更重要的场合,如移动即时通讯。

项目地址:https://github.com/m13253/JKSN。Specification 和参考实现均以 BSD 协议发布。

为什么不用 GZIP 呢?
JKSN 和 GZIP 不冲突。JKSN 编码后的数据可以被 GZIP 压缩得更小。
由于 GZIP 的 32 KiB 滑动窗口的设计,相似的数据只有互相间隔不超过 32 KiB 才能得到有效压缩。JKSN 会将数据重新组织,使相似的数据尽可能靠近排列,更有利于 GZIP 的压缩。

下面,用项目主页上举的例子,做个比较,:
格式文件大小
JSON150 字节
JSON gzip -9112 字节
JKSN109 字节
JKSN gzip -9107 字节
再来比较同类二进制 JSON 实现:
格式文件大小
BSON172 字节
Universal Binary Json150 字节
MessagePack120 字节
JSONH116 字节
BJSON(内置自适应哈夫曼压缩)115 字节
JKSN109 字节

如果各位读者对此项目感兴趣,且有空余时间,不妨让 JKSN 变得更好:
目前 JKSN 已经有 Python 3、Python 2、浏览器 JavaScript、Node.JS、C 五种环境的实现了。如果你愿意,请帮助我为 JKSN 补上 PHP 5、Java 的实现。
追求模范性和稳定性的实现可以直接 fork JKSN repository 并发给我 Pull Request;追求速度的实现可以另开新 repository 并通知我。
如果你知道怎么重新组织 JSON 结构让其更易于压缩,请联系我。我希望和你探讨问题。