CN103401562B - 一种无损json数据压缩方法 - Google Patents

一种无损json数据压缩方法 Download PDF

Info

Publication number
CN103401562B
CN103401562B CN201310328885.3A CN201310328885A CN103401562B CN 103401562 B CN103401562 B CN 103401562B CN 201310328885 A CN201310328885 A CN 201310328885A CN 103401562 B CN103401562 B CN 103401562B
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.)
Active
Application number
CN201310328885.3A
Other languages
English (en)
Other versions
CN103401562A (zh
Inventor
孔校军
刘洁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BEIJING HUAYI INTERACTIVE TECHNOLOGY Co Ltd
Original Assignee
BEIJING HUAYI INTERACTIVE TECHNOLOGY Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by BEIJING HUAYI INTERACTIVE TECHNOLOGY Co Ltd filed Critical BEIJING HUAYI INTERACTIVE TECHNOLOGY Co Ltd
Priority to CN201310328885.3A priority Critical patent/CN103401562B/zh
Publication of CN103401562A publication Critical patent/CN103401562A/zh
Application granted granted Critical
Publication of CN103401562B publication Critical patent/CN103401562B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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数据压缩方法。
背景技术
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原始数据中本身包含“#”字符,则在标识符前面加“\”转意字符。
CN201310328885.3A 2013-07-31 2013-07-31 一种无损json数据压缩方法 Active CN103401562B (zh)

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 CN103401562A (zh) 2013-11-20
CN103401562B true CN103401562B (zh) 2016-07-06

Family

ID=49565121

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310328885.3A Active CN103401562B (zh) 2013-07-31 2013-07-31 一种无损json数据压缩方法

Country Status (1)

Country Link
CN (1) CN103401562B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9853956B2 (en) * 2014-02-11 2017-12-26 Texas Instruments Incorporated JSON encryption and hashing with indication added to key-value
CN106599126A (zh) * 2016-12-02 2017-04-26 北京国网普瑞特高压输电技术有限公司 一种电池储能监控系统数据交换系统及其交换方法
CN108156173A (zh) * 2018-01-09 2018-06-12 江苏徐工信息技术股份有限公司 一种json数据包的动态无损压缩方法
CN109450450B (zh) * 2018-10-17 2022-09-23 杭州费尔斯通科技有限公司 一种json数据实时无损压缩以及解压方法
CN110247665A (zh) * 2019-05-16 2019-09-17 芜湖智久机器人有限公司 Json数据的压缩方法、装置及计算机可读存储介质
CN114726792B (zh) * 2022-04-19 2023-06-20 中国联合网络通信集团有限公司 一种基于json报文的处理方法、装置、设备及介质
CN115002234A (zh) * 2022-05-25 2022-09-02 阿维塔科技(重庆)有限公司 一种数据报文转换方法、装置、设备及计算机可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 北京航空航天大学 一种新的多视点视频分形编码压缩与解压缩方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030231799A1 (en) * 2002-06-14 2003-12-18 Craig Schmidt Lossless data compression using constraint propagation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 北京航空航天大学 一种新的多视点视频分形编码压缩与解压缩方法

Also Published As

Publication number Publication date
CN103401562A (zh) 2013-11-20

Similar Documents

Publication Publication Date Title
CN103401562B (zh) 一种无损json数据压缩方法
CN102629373B (zh) 基于稀疏表示理论的超分辨率图像获取方法
CN104753540A (zh) 数据压缩方法、数据解压方法和装置
KR102002573B1 (ko) 빠른 직교 투영
CN101783788A (zh) 文件压缩、解压缩方法、装置及压缩文件搜索方法、装置
CN105096367B (zh) 优化Canvas绘制性能的方法及装置
US20200294629A1 (en) Gene sequencing data compression method and decompression method, system and computer-readable medium
CN104850859A (zh) 一种基于多尺度分析的图像特征包构建方法
CN105589908A (zh) 用于事务集合的关联规则计算方法
Shi et al. An approach to text steganography based on search in internet
CN104484432A (zh) 基于四元数指数矩的彩色图像检索方法
CN105302915A (zh) 基于内存计算的高性能数据处理系统
CN106126495A (zh) 一种基于大规模语料提词方法和装置
CN104063518A (zh) 一种针对大数据的分解组合聚类方法
CN104200451A (zh) 一种基于非局部稀疏k-svd算法的图像融合方法
CN104682966B (zh) 列表数据的无损压缩方法
CN105427583A (zh) 一种基于lzw编码的道路交通数据压缩方法
Abdulmunem et al. Advanced Intelligent Data Hiding Using Video Stego and Convolutional Neural Networks
CN107818325A (zh) 基于集成字典学习的图像稀疏表示方法
CN108256003A (zh) 一种根据分析数据重复率提高union运算效率的方法
CN103744885A (zh) 一种基于子块的融合颜色和方向特征的图像检索方法
CN104182386A (zh) 词对关系相似度的计算方法
CN104869110A (zh) 一种应用于入侵检测系统的ac算法
Ren et al. Reversible Data Hiding Scheme based on Fractal Image Coding.
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