节省流量,Andriod中必备啊

JSON 的压缩算法, 目前有 CJSON 和 HPack 两种, 都是透过结构的改变, 来将容量压小, 所以 Client 端写法还是得要改写. (不同于 gzip 等压缩算法)



HPack 与 CJSON 的 Source code
CJSON: 下载 (备份)
HPack: WebReflection/json.hpack - GitHub
CJSON Compress Algorithm
CJSON 的算法可见此篇: Compress your JSON with automatic type extraction
原理: CJSON 的压缩算法, 主要是将资料抽离成 Template 与 Value, 节省掉重复的 "Key 值".
原始 JSON

[    { // This is a point      "x": 100,      "y": 100    }, { // This is a rectangle      "x": 100,      "y": 100,      "width": 200,      "height": 150    },    {}, // an empty object  ]


使用 CJSON 压缩的 JSON

{    "templates": [      [0, "x", "y"], [1, "width", "height"]    ],    "values": [      { "values": [ 1,  100, 100 ] },      { "values": [2, 100, 100, 200, 150 ] },      {}    ]  }


HPack Compress Algorithm
HPack 的算法可见此篇: Web Resource Optimization: JSON Compression algorithms
原理: HPack 的压缩算法, 也是将 Key, Value 抽离, 阵列中第一个值, 就是 CJSON 的 Template, 后面依序就是 Value.
原始 JSON

[{    name : "Andrea",    age : 31,    gender : "Male",    skilled : true  }, {    name : "Eva",    age : 27,    gender : "Female",    skilled : true  }, {    name : "Daniele",    age : 26,    gender : "Male",    skilled : false  }]


使用 HPack 压缩的 JSON


[["name","age","gender","skilled"],["Andrea",31,"Male",true],["Eva",27,"Female",true],["Daniele",26,"Male",false]]


结论
HPack 的压缩效率比较高, 如果 JSON 内容太少, CJSON 的资料可能反而会比较多


其他资料:

http://www.oschina.net/p/jsonhpack