导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:359
阅读量:1984434
访问量:240354
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
Tags : 移动开发,压缩json发表时间: 2015-11-28 19:35:31

最近做了个移动web应用,java平台做后台,后台查询的数据结果用json格式传输,其中有个页面,后台返回的数据量很大,json字符串达到了68K,这对于移动设备的流量和响应速度来说,绝对是个悲剧。

1,未处理前的数据格式为:

{[{"consDept":"A部门","consDeptCode":"001","provinceScheduleVO":[{"projectTypeCode":"DEngineering","percentSchedule":"100","planStartStatus":"2"},{"projectTypeCode":"Main","percentSchedule":"50","planStartStatus":"2"}, ……]},

{"consDept":"B部门","consDeptCode":"002","provinceScheduleVO":[{"projectTypeCode":"DEngineering","percentSchedule":"100","planStartStatus":"1"},{"projectTypeCode":"Main","percentSchedule":"0","planStartStatus":"1"}, ……]}, …… ]};

字符串大小为68K.

 

2,很明显,字符串越长,体积越大,因为是数组形式,相同的属性名称会重复很多次,通过减短属性名称,应该能降低不少体积。

比如,把consDept属性名改成a,consDeptCode属性名改成b,把projectTypeCode属性名称改成c, ……  切记不要传输前台不需要的属性。

处理后的数据格式为:

 

{[{"a":"A部门","b":"001","VO":[{"c":"DEngineering","d":"100","e":"2"},{"c":"Main","d":"50","e":"2"}, ……]},

{"a":"B部门","b":"002","VO":[{"c":"DEngineering","d":"100","e":"1"},{"c":"Main","d":"0","e":"1"}, ……]}, …… ]};

字符串大小变成了25K,效果很明显。

对于这种数组形式,如果数据格式相对比较简单,没有嵌套的一维数组,甚至可以改成键值对的形式, 比如 “a”:["A部门","B部门","C部门"] ,以减少“a”属性名称出现的次数。  

 

3,对结果再采用压缩算法来压缩,(此处演示用ZIP或GZIP压缩)

ZIP压缩,除了压缩外,还会归档成一个文件

GZIP压缩,则只能压缩。本应用无需归档,所以,此处采用GZIP方式压缩字符串。

运用jdk自带的java.util.zip.GZIPInputStream,java.util.zip.GZIPOutputStream 即可完成压缩。

处理后的数据格式为:

"{?x5cu0001°T?U?????5x5cu003ex5cu0010?(x5crx5cu0002Ql?x5cu0018x5cu0013x5cu0014±x5cu0015x5cu000bH??x5cu0016x5c"b??? ?x5c"_A?x5cu0019v???èx5cu001e??×??I?2Op?ss???????x5cu000
2??????[?x5cu001bY~x5cu001f?_y?yn?x5crx5cu0027??B7?x5cnm?is6x5cu000eU?èüH}ì7;úVá*?x5cu0013Q??x5cu0012re??Wx5cu0016?x5cu000f??x5cu0015?àx5cu0013?|8Bm??-J7q?V?]x5cu0013ux5cx5cx5cu003dA???x5cu001frB??x5cu000f????x5cu0005?x5cu0016?x5cu0012|T?N??x5cu0012?p????x5cu0004Ué[??^?·x5cu003c???9T?x5cu001aux5cn?eE???_x5cu001fJ?O}……

字符串大小变成了1.4K,节省了不少空间。

 

附上GZIP压缩java代码:

 

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
 ...阅读原文





        
文章来源:itd4j 类别:移动| 阅读(1886)
推荐文章