json数据压缩

本文深入探讨了多种JSON数据压缩方法,包括去除换行、使用gzip/deflate算法、CJSON及HPack压缩,旨在提高数据传输效率,降低带宽消耗。通过实例展示了不同压缩方法的效果,特别强调了HPack在保持数据完整性的同时,显著减少JSON文件大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

json是一种非常简单、易读的数据结构。通常我们在做开发时,会选取json作为数据传输格式。同时为了提升性能、降低带宽,我们一般会对json数据进行压缩。今天我们就来谈谈各种压缩方法。

1、常规压缩:

默认的json数据是带有换行的,所以最简单的压缩方法是将json中的回车换行去掉,压缩成一行字符串。

测试:找了一个大的json字符串,原始大小为1.1m,去掉回车换行压缩成一行后,大小变为了360k。

在线压缩工具:https://www.bejson.com/

其次,我们还可以将json中的key变短,设置可以是无意义的符号(只要我们规定好含义即可),这样也能减少json大小。

2、使用gzip、deflate算法压缩:

json本身就是一个文本信息,所以我们可以使用gzip、deflate等算法对其进行压缩,它们都是使用哈弗慢编码的一个无损数据压缩算法,对文本内容压缩的压缩比很高,基本在80%以上。大多数浏览器也都是使用这两种方式对http协议中的响应实体进行压缩。

这里不过多举例子,有兴趣的同同学可以自行尝试。

3、CJSON和HPack压缩算法:

这两种都是针对json数据结构压缩的算法。其主要思路都是将原始json数据抽离成 Template 与 Value,节省掉重复的 "Key 值"。1)cjson压缩:

例如,一个原始json:

[
    {
        "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 ] 
        },
        {}
    ]
}

2)hpack压缩:

hpack是一个无损、跨语言、注重性能的数据集压缩程序。它能够将用于表示泛型同构集合的字符数减少70%。此算法提供了多个级别的压缩(从0到4)。级别0压缩通过从结构中删除键(属性名)来执行最基本的压缩,该结构在索引0上创建一个具有每个属性名的头。下一个级别允许通过假设存在重复的条目来进一步减小JSON的大小。
原始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
 
}]

压缩后:

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

结论:
两种方法都是主要讲json 的 键抽出来统一建成索引,只是最后的格式不同,HPack 简化后的格式比CJSON 少了许多字符,所以HPack 的压缩效率比较高, 如果 JSON 内容太少, CJSON的资料可能反而会比较多。

参考:

https://blog.csdn.net/ZYC88888/article/details/104697362

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值