CN103401562A - 一种无损json数据压缩方法 - Google Patents
一种无损json数据压缩方法 Download PDFInfo
- Publication number
- CN103401562A CN103401562A CN2013103288853A CN201310328885A CN103401562A CN 103401562 A CN103401562 A CN 103401562A CN 2013103288853 A CN2013103288853 A CN 2013103288853A CN 201310328885 A CN201310328885 A CN 201310328885A CN 103401562 A CN103401562 A CN 103401562A
- Authority
- CN
- China
- Prior art keywords
- value
- data
- json
- key
- compression
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 21
- 238000013144 data compression Methods 0.000 title claims abstract description 9
- 238000007906 compression Methods 0.000 claims abstract description 45
- 230000006835 compression Effects 0.000 claims abstract description 44
- 230000003247 decreasing effect Effects 0.000 abstract 1
- 239000000284 extract Substances 0.000 description 5
- 238000013497 data interchange Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000001066 destructive effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012467 final product Substances 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种无损JSON数据压缩方法。本方法为:1)遍历读取待压缩的JSON数据,对每一JSON对象分别生成一数据对象,该数据对象包含该JSON对象的所有Key值和Value值;2)对每一数据对象的Key值进行对比,将重复的Key值生成一Key值模版;对每一数据对象的Value值进行对比,将重复的Value值生成一Value值模版;3)按照Key值模版和Value值模版对待压缩的JSON数据进行压缩:将同一数据对象中重复的Value值替换成标识符,该标示符指示该Value值位于第几个Value值模板中的第几个值。本发明进一步降低了压缩率,在数据越大时压缩率越低,压缩后的文件越小。
Description
技术领域
本发明涉及一种无损数据压缩方法,特别是一种无损JSON数据压缩方法。
背景技术
JSON是一种轻量级的数据交换格式,易于人阅读和书写,易于机器解析和生成。它可以被用来作为数据交换格式,就像XML。当比较JSON和XML时,JSON具有以下几个优点:1.易于人阅读和编写。2.易于机器解析和生成。这也是为什么JSON会被认为是XML的轻量级替代的原因。虽然JSON有以上几个优点,但是其数据重复度依然比较高,文件越大,KEY值重复次数越多,在移动互联网应用中传输数据消耗的流量较多,于是就出现了一些JSON数据压缩方法。
JSON的压缩算法目前有CJSON和HPack两种开源压缩方法,两种算法都是通过数据结构的改变来实现压缩,其中CJSON的压缩方法主要是将原始JSON数据抽离成Template(模版)和Value(值),即省掉其中JSON数据中重复的“Key值”。HPack也是将原始JSON数据抽离成Template和Value,阵列中第一个值是Template,后面依序就是Value。两种压缩效果如下:
例1
压缩前:
[{
name:"Andrea",
age:31,
gender:"Male",
skilled:true
},
{
name:"Daniele",
age:26,
gender:"Male",
skilled:false
}]
使用CJSON压缩后:
{
"templates":[
[“name”,"age","gender",”skilled”]
],
"values":[
{“values”:[“Andrea”,31,”Male”,true]},
{"values":[“Daniele”,26,“Male”,false]}
]
}
使用HPack压缩后:
[["name","age","gender","skilled"],["Andrea",31,"Male",true],["Daniele",26,"Male",false]]很显然,HPack压缩方法压缩率更高,但是HPack使用过程复杂,不能压缩复杂的JSON数据,如下:
例2
压缩前:
[
{
"x":100,
"y":100
},{
"x":100,
"y":100,
"width":200,
"height":150
},
{},
]
使用CJSON压缩后:
{
"templates":[
[0,"x","y"],[1,"width","height"]
],
"values":[
{"values":[1,100,100]},
{"values":[2,100,100,200,150]}
]
}
而HPack无法对此数据进行压缩。
从以上例子中CJSON压缩后的数据发现,仍然有很多重复字符,还有进一步的压缩空间。CJSON和HPack都是对“Key值”进行提取模版压缩,并没有对“Value值”进行压缩。
发明内容
针对现有技术中存在的技术问题,本发明的目的在于提供一种无损JSON数据压缩方法,集成了原有的CJSON和HPack压缩方法的优点,对原有JSON数据全部读取后抽取模版,抽取相同的“Key值”和“Value值”作为模版,进行数据格式重组,以达到压缩的目的。
本发明的技术方案为:
一种无损JSON数据压缩方法,其步骤为:
1)遍历读取待压缩的JSON数据,对其中的每一JSON对象分别生成一数据对象,该数据对象包含该JSON对象的所有Key值和Value值;
2)对每一数据对象的Key值进行对比,将重复的Key值生成一Key值模版;对每一数据对象的Value值进行对比,将重复的Value值生成一Value值模版;
3)按照Key值模版和Value值模版对待压缩的JSON数据进行压缩:将同一数据对象中重复的Value值替换成标识符,该标示符指示该Value值位于第几个Value值模板中的第几个值。
进一步的,对于每一数据对象,压缩后的数据包括:{Key值模板序号及对应的Key值,Value值模板序号及其对应的Value值,压缩后的Value:[[Key值模板序号,未重复的Value值,重复的Value值对应的标示符],……]}。
进一步的,所述标识符以“#”开头,采用“#n.m”代表第n个Vlaue值模版中的第m个值。
进一步的,如果JSON原始数据中本身包含“#”字符,则在标示符前面加“\”转意字符。
与现有技术相比,本发明的积极效果为:
本发明通过对原有JSON数据全部读取后抽取模版,抽取相同的“Key值”和“Value值”作为模版,进行数据格式重组,通过表1显示本发明在无损JSON数据越大时压缩率越低,压缩后的文件越小,通过本案压缩的结果明显优于CJSON压缩,至少比CJSON压缩压缩率要低10%。
具体实施方式
本发明的具体无损压缩流程为:
1、遍历读取JSON数据,对其中的JSON对象进行解析,分别生成数据对象,该数据对象包含一个JSON对象所有的“Key值”和“Value值”。
2、对每一个数据对象拥有的“Key值”进行对比,抽取出重复的“Key值”,生成“Key值”模版。
3、对每一个数据对象的“Value值”进行对比,对出现2次及以上的“Value值”提取出来,生成“Value值”模版。
4、针对同一数据对象,将“Value值”中重复的“Value值”替换成标识符,标识符以“#”开头,后面跟数字代表的是第一个“Value值”模版,后面再跟“.”和数字代表该“Value值”模版中第几个值,如“#1.2”代表第一个“Vlaue值”模版中的第二个值。
5、生成新的JSON数据
具体压缩结果示例:
对例1的原始数据进行压缩后的结果如下:
{"t":[["name","age","gender","skilled"]],
"vt":[["Male"]],
"v":[[1,"Andrea",31,"#1.1",true],[1,"Daniele",26,"#1.1",false]]}
注:t代表“Key值”模版,vt代表“Value值”模版,v代表“Value值”,每一个“Value值”对象的第一个值代表应用的“Key值”模版序号,此例中只有一个“Key值”模版,因此,两个“Value值”对象的模版序号都是1。“#”为本案中的指示符,如果JSON原始数据中本身包含“#”字符,需在前面加“\”转意字符即可。
压缩效果对比:
从以上例子中可以发现,本案的压缩效果比CJSON的压缩效果要好一点,但是并没用太大的改观,这是因为我们原始数据太小,下面表1是我们测试对比了5个不同大小的JSON数据的CJSON压缩和本案的压缩结果大小,更能够清晰的说明本压缩方法的效果。
表1压缩效果对比表
JSON1 | JSON2 | JSON3 | JSON4 | JSON5 | |
原JSON大小 | 52966 | 104370 | 233012 | 493589 | 1014099 |
CJSON压缩 | 24899 | 48605 | 108983 | 231760 | 471230 |
本案压缩 | 16727 | 20781 | 43162 | 99039 | 180575 |
以上表1显示本案压缩在无损JSON数据越大时、压缩率越低,压缩后的文件越小,通过本案压缩的结果明显优于CJSON压缩,至少比CJSON压缩压缩率要低10%。
本案也可以对转换后的数据进行恢复,恢复过程为压缩过程反向运算,因此就不再赘述。
Claims (4)
1.一种无损JSON数据压缩方法,其步骤为:
1)遍历读取待压缩的JSON数据,对其中的每一JSON对象分别生成一数据对象,该数据对象包含该JSON对象的所有Key值和Value值;
2)对每一数据对象的Key值进行对比,将重复的Key值生成一Key值模版;对每一数据对象的Value值进行对比,将重复的Value值生成一Value值模版;
3)按照Key值模版和Value值模版对待压缩的JSON数据进行压缩:将同一数据对象中重复的Value值替换成标识符,该标示符指示该Value值位于第几个Value值模板中的第几个值。
2.如权利要求1所述的方法,其特征在于对于每一数据对象,压缩后的数据包括:{Key值模板序号及对应的Key值,Value值模板序号及其对应的Value值,压缩后的Value:[[Key值模板序号,未重复的Value值,重复的Value值对应的标示符],……]}。
3.如权利要求1或2所述的方法,其特征在于所述标识符以“#”开头,采用“#n.m”代表第n个Vlaue值模版中的第m个值。
4.如权利要求3所述的方法,其特征在于如果JSON原始数据中本身包含“#”字符,则在标示符前面加“\”转意字符。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310328885.3A CN103401562B (zh) | 2013-07-31 | 2013-07-31 | 一种无损json数据压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310328885.3A CN103401562B (zh) | 2013-07-31 | 2013-07-31 | 一种无损json数据压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103401562A true CN103401562A (zh) | 2013-11-20 |
CN103401562B CN103401562B (zh) | 2016-07-06 |
Family
ID=49565121
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310328885.3A Expired - Fee Related CN103401562B (zh) | 2013-07-31 | 2013-07-31 | 一种无损json数据压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103401562B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105993010A (zh) * | 2014-02-11 | 2016-10-05 | 德州仪器公司 | 用以提供扩展对象符号数据的方法及设备 |
CN106599126A (zh) * | 2016-12-02 | 2017-04-26 | 北京国网普瑞特高压输电技术有限公司 | 一种电池储能监控系统数据交换系统及其交换方法 |
CN108156173A (zh) * | 2018-01-09 | 2018-06-12 | 江苏徐工信息技术股份有限公司 | 一种json数据包的动态无损压缩方法 |
CN109450450A (zh) * | 2018-10-17 | 2019-03-08 | 杭州费尔斯通科技有限公司 | 一种json数据实时无损压缩以及解压方法 |
CN110247665A (zh) * | 2019-05-16 | 2019-09-17 | 芜湖智久机器人有限公司 | Json数据的压缩方法、装置及计算机可读存储介质 |
CN114726792A (zh) * | 2022-04-19 | 2022-07-08 | 中国联合网络通信集团有限公司 | 一种基于json报文的处理方法、装置、设备及介质 |
CN115002234A (zh) * | 2022-05-25 | 2022-09-02 | 阿维塔科技(重庆)有限公司 | 一种数据报文转换方法、装置、设备及计算机可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030231799A1 (en) * | 2002-06-14 | 2003-12-18 | Craig Schmidt | Lossless data compression using constraint propagation |
CN101594597A (zh) * | 2008-05-30 | 2009-12-02 | 华为技术有限公司 | 一号通呼叫方法、装置和系统 |
CN102255914A (zh) * | 2011-07-19 | 2011-11-23 | 河南大学 | 一种Android网络应用程序信息验证方法 |
CN102905150A (zh) * | 2012-10-22 | 2013-01-30 | 北京航空航天大学 | 一种新的多视点视频分形编码压缩与解压缩方法 |
-
2013
- 2013-07-31 CN CN201310328885.3A patent/CN103401562B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030231799A1 (en) * | 2002-06-14 | 2003-12-18 | Craig Schmidt | Lossless data compression using constraint propagation |
CN101594597A (zh) * | 2008-05-30 | 2009-12-02 | 华为技术有限公司 | 一号通呼叫方法、装置和系统 |
CN102255914A (zh) * | 2011-07-19 | 2011-11-23 | 河南大学 | 一种Android网络应用程序信息验证方法 |
CN102905150A (zh) * | 2012-10-22 | 2013-01-30 | 北京航空航天大学 | 一种新的多视点视频分形编码压缩与解压缩方法 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105993010A (zh) * | 2014-02-11 | 2016-10-05 | 德州仪器公司 | 用以提供扩展对象符号数据的方法及设备 |
CN106599126A (zh) * | 2016-12-02 | 2017-04-26 | 北京国网普瑞特高压输电技术有限公司 | 一种电池储能监控系统数据交换系统及其交换方法 |
CN108156173A (zh) * | 2018-01-09 | 2018-06-12 | 江苏徐工信息技术股份有限公司 | 一种json数据包的动态无损压缩方法 |
CN109450450A (zh) * | 2018-10-17 | 2019-03-08 | 杭州费尔斯通科技有限公司 | 一种json数据实时无损压缩以及解压方法 |
CN110247665A (zh) * | 2019-05-16 | 2019-09-17 | 芜湖智久机器人有限公司 | Json数据的压缩方法、装置及计算机可读存储介质 |
CN114726792A (zh) * | 2022-04-19 | 2022-07-08 | 中国联合网络通信集团有限公司 | 一种基于json报文的处理方法、装置、设备及介质 |
CN115002234A (zh) * | 2022-05-25 | 2022-09-02 | 阿维塔科技(重庆)有限公司 | 一种数据报文转换方法、装置、设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103401562B (zh) | 2016-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103401562B (zh) | 一种无损json数据压缩方法 | |
CN105404686A (zh) | 一种基于地理特征层次分词的新闻事件地名地址匹配方法 | |
CN103425639A (zh) | 一种基于信息指纹的相似信息识别方法 | |
CN104753540A (zh) | 数据压缩方法、数据解压方法和装置 | |
CN104751148B (zh) | 一种版式文件中识别科学公式的方法 | |
CN105468371A (zh) | 一种基于主题聚类的业务流程图合并方法 | |
CN101604408B (zh) | 一种检测器的生成和检测方法 | |
Shi et al. | An approach to text steganography based on search in internet | |
CN104317946A (zh) | 一种基于多张关键图的图像内容检索方法 | |
CN105528345A (zh) | 终端、服务器和补字方法 | |
Ristoski et al. | Analyzing Statistics with Background Knowledge from Linked Open Data. | |
CN104063518A (zh) | 一种针对大数据的分解组合聚类方法 | |
CN104200451A (zh) | 一种基于非局部稀疏k-svd算法的图像融合方法 | |
CN103684751A (zh) | 基于规范类正交矩阵的信息隐藏与提取方法及其fpga器件 | |
CN103810287A (zh) | 基于有监督共享组件主题模型的图像分类方法 | |
CN104376300A (zh) | 一种基于网格特征智能匹配残缺汉字的识别方法 | |
CN102253983A (zh) | 一种汉语高危词识别方法和系统 | |
Li et al. | A human-computer interactive dynamic description method for Jiaguwen Characters | |
CN103870543A (zh) | 一种用于文档文件重构的方法及装置 | |
CN104268034B (zh) | 一种数据备份方法及装置和数据恢复方法及装置 | |
CN103824006B (zh) | 一种手机应用软件自动生成水印的方法和系统 | |
Qi et al. | Cloud model based zero-watermarking algorithm for authentication of text document | |
Borusyak et al. | Development of an algorithm for adaptive compression of indexed images using contextual simulation | |
Kadir et al. | Identification of fragmented JPEG files in the absence of file systems | |
CN103219999A (zh) | 一种基于lzw压缩算法的可逆的信息隐藏方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160706 |
|
CF01 | Termination of patent right due to non-payment of annual fee |