压缩的Json Javascript

28

目前我通过 Ajax 请求将 JSON 发送到服务器,然后使用 Jackson 映射工具将其转换为对象。

JSON 的格式如下:

{"id":"780710","folderID":"42024","displayOrder":2},{"id":"780724","folderID":"42024","displayOrder":3}
什么是最好的JavaScript库来压缩这些数据,Jackson mapper能否处理新格式?

1
比这更小,你会发现键名中使用更少的字符,这可能会降低 JSON 对象的可读性。然而,有些程序员并不介意使用不描述它们指向的数据的晦涩键名。 - kevin628
4
如果上面的JSON数据示例大小增加100倍,我可以使用类似于 https://github.com/WebReflection/json.hpack/wiki 的库来将JSON格式转换为 ["id",["780710","780724"],"folderID",["42024"],"displayOrder",["2","3"]]。Jackson可以处理这种格式吗? - rayray
1
什么是Jackson?迈克尔·杰克逊?;) 如果你想压缩它,你需要有一些东西来解压它,然后通过JSON解析运行它。你所拥有的是一些奇怪的数组上面的注释。 - epascarello
2
@epascarello 什么是谷歌?先试试这个。 - Ian
2
不使用转换,实际的真正压缩(gzip、lzf/lz4/snappy)可以获得更好的结果,并且如果客户端支持它(浏览器支持),则更兼容。 - StaxMan
显示剩余2条评论
5个回答

41

为什么不启用浏览器和Web服务器支持的gzip压缩?这将非常有效地压缩数据大小,几乎不需要任何明确的工作。


11
一个非常好的想法,但是:你将如何实现它? - humanityANDpeace
2
是的,gzip可以在JSON和XML中产生令人印象深刻的比率,特别是如果内容缩进(这不应该用于生产,但有些开发人员会意外地将其保留)。 - StaxMan
2
为什么不呢?gzip是一个很好的解决方案,所以+1。但是可能会有更好的解决方案,因为gzip是一种通用的压缩算法。原则上,如果您拥有一个知道数据结构的特定算法,那么您可以做得更好 - 而JSON具有简单、明确定义的结构。我还没有找到这样的算法。 - James
5
这个答案有点不够充分,因为OP要求提供一种用于AJAX请求的压缩方法。如果没有任何外部库,现在只能对从服务器发送的数据进行gzip压缩。 - Lewis
1
值得检查浏览器的ajax辅助方法提供了什么。可能有一个设置来启用/强制gzip压缩。我已经有一段时间没有编写ajax应用程序了,但是还记得那里有一些设置。如果没有,你是对的,不能从Javascript本身进行操作而不使用ext库。 - StaxMan
显示剩余6条评论

15

正如@JamWaffles所说,这是JSON在压缩方面能做到的最好程度,对于您提供的代码行来说,进一步压缩可能过度。

但是如果您有更大的响应数据,并且想要节省字节数,请看看

或者

它们不是JSON,但它们将数据序列化为一个更小的格式(在大多数情况下)。


6
遗憾的是,BSON通常并不比JSON更紧凑。此外,如果客户端使用Javascript编写,二进制格式实际上非常糟糕(因为客户端会变得更慢,JSON解析器/生成器是本地的,浏览器没有提供本地的二进制编解码器)。 - StaxMan
感谢Beat Richartz和staxman。 - rayray
11
这些方法对我都不是很理想。以下是我在一个4MB的JSON文件上获得的结果: BSON:5.2MB; msgpack:5.1MB; lz-string(UTF16):607KB; lz-string:576KB; lz4:555KB; lz-string(base64):519KB。 - Peter Ehrlich
5
我很愿意看到那个4MB的JSON文件。尤其是在使用msgpack的情况下,我无法理解为什么你最终会得到一个大约多出25%的文件。 - Beat Richartz
4
也许是由于base64编码...通常情况下,如果内容大多是字符串值,那么二进制格式并没有太多用处,加上base64就可以解释这一点。 - StaxMan

6
您可以使用例如jsonh,它是hpack的后继者,在Web资源优化上进行了基准测试。它有所帮助,但同一网站还会告诉您,仅使用gzip可能已经足够。

因此,明确地说,gzip比hpack更有效,但将它们组合在一起可以增加一些压缩效果。


jsonh不是hpack的继承者。它们使用类似的存储格式,但是hpack深入到对象中,而jsonh只转换一级数组,忽略嵌套对象。两者都不是压缩工具,而是用于同质数据的高效存储格式。 - metalim
3
好的,感谢您的更正。我可能被jsonh页面上的“JSONH是json.hpack项目的最新版本,基于JSONDB概念”所困惑了。 - Mark
好的,没问题,它有一些继承的特点。但是它们具有不同的功能。 - metalim
更改的详细信息在此处:http://webreflection.blogspot.com.ee/2011/08/last-version-of-json-hpack.html - metalim

2
JsonZipper 对于多个相似重复对象也非常棒。它允许您仅从数组中提取一个对象索引,以其“压缩”状态使用该对象,因此在内存方面非常出色,因为它始终“仅提取您想要的内容”。
哦,你实际上可以“即时压缩”,所以基本上当您生成数据对象时,您可以将它们压缩,这样您就始终具有小的内存占用。
大多数其他压缩算法必须一次性压缩和提取所有数据。
但请注意:如果您的数据是同种集合(完全相同的键),则 hpack 会更好。

该项目看起来完全没有生命力,只有一个名为“u12206050”的匿名用户和几乎没有粉丝。 - PandaWood
1
目前可能只是能够正常工作,不需要进一步的改进 :P - Gerardlamo

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接