CN103401562B - 一种无损json数据压缩方法 - Google Patents
一种无损json数据压缩方法 Download PDFInfo
- 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
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是一种轻量级的数据交换格式,易于人阅读和书写,易于机器解析和生成。它可以被用来作为数据交换格式,就像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 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)
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)
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030231799A1 (en) * | 2002-06-14 | 2003-12-18 | Craig Schmidt | Lossless data compression using constraint propagation |
-
2013
- 2013-07-31 CN CN201310328885.3A patent/CN103401562B/zh active Active
Patent Citations (3)
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 |