【问题标题】:Compressed Json Javascript [closed]压缩的 Json Javascript [关闭]
【发布时间】:2012-07-13 11:32:26
【问题描述】:

目前我将 JSON 从 Ajax 帖子发送到服务器,然后使用 Jackson Mapper 将其转换为对象。

格式是这样的

{"id":"780710","folderID":"42024","displayOrder":2},{"id":"780724","folderID":"42024","displayOrder":3}

压缩此数据的最佳 JavaScript 库是什么?Jackson 映射器是否能够处理新格式?

【问题讨论】:

  • 任何比这更小的,并且您正在谈论在键名中使用更少的字符,这可能会开始降低 JSON 对象的可读性。再说一次,一些程序员使用不描述他们指向的数据的晦涩的键名是没有问题的。
  • 好的,如果上面的 json 数据示例是大小的 100 倍,我可以使用像 github.com/WebReflection/json.hpack/wiki 这样的库,它将 json 格式减少到 [“id”,[“780710”,“780724”] ,“文件夹ID”,[“42024”],“displayOrder”,[“2”,“3”]]。杰克逊可以处理这种格式吗?
  • 杰克逊是什么?迈克尔杰克逊? ;) 如果你想压缩它,你需要解压缩它而不是通过 JSON 解析运行它。你所拥有的是评论上方的一些奇怪的数组。
  • @epascarello 什么是 Google?先试试吧
  • 不使用转换,实际的真实压缩(gzip、lzf/lz4/snappy)会得到更好的结果,并且如果客户端支持(浏览器支持)则更兼容

标签: javascript compression jackson


【解决方案1】:

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

【讨论】:

  • 一个非常好的主意,但是:您将如何启用它?
  • 是的,gzip 可以使用 JSON 和 XML 产生令人印象深刻的定量,尤其是在内容缩进的情况下(不应该在生产环境中这样做,但一些开发人员会不小心将其保留)。
  • “为什么不呢?” gzip 是一个很好的解决方案,所以 +1。但是可能有更好的解决方案,因为 gzip 是一种通用压缩算法。原则上,如果你有一个知道数据结构的特定算法,你可以做得更好——而且 JSON 有一个简单、定义明确的结构。我还没有找到。
  • 这个答案有点不足,因为 OP 要求 AJAX 请求的压缩方法。在没有任何外部库的情况下,gzip 压缩现在只能对从服务器发送的数据进行。
  • 可能值得检查一下浏览器的 ajax 辅助方法提供了什么。可能存在启用/强制 gzip 压缩的设置。我已经有一段时间没有编写 ajax 应用程序了,但记得那里有一些设置。如果没有,你是对的,如果没有 ext 库,就无法从 Javascript 本身真正做到这一点。
【解决方案2】:

正如@JamWaffles 所说,这是 JSON 在压缩方面所能做的最好的事情。在您的情况下(您交付的代码行),进一步压缩可能是矫枉过正。

但是,如果您有更大的响应,并且想要保存这些字节,请查看

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

【讨论】:

  • 唉,BSON 通常并不比 JSON 更紧凑。此外,如果客户端是用 Javascript 编写的,二进制格式真的很糟糕,因为客户端会慢得多(JSON 解析器/生成器是本机的,浏览器不提供本机二进制编解码器)。
  • 感谢 Beat Richartz 和 staxman
  • 这些对我来说都不是很好。这是我对 4mb JSON 文件的分析。 BSON:5.2MB;消息包:5.1MB; lz-string(UTF16):607kb lz-string:576kb; lz4:555kb; lz 字符串(base64):519KB
  • @PeterEhrlich 我很想看到那个 4MB 的 JSON 文件。特别是在 msgpack 的情况下,我看不出你怎么可能最终得到一个大约 25% 的文件。
  • @BeatRichartz 可能是由于 base64 编码......通常如果内容主要是 String 值,则没有太多二进制格式可以做,所以加上 base64 可以解释它。
【解决方案3】:

您可以使用例如jsonh,hpack 的继任者,在 web-resource-optimization 上有基准。它会有所帮助,但同一个网站也会告诉您,单独使用 gzip 可能就足够了。

所以要明确一点,gzip 比 hpack 效果更好,但是将它们结合起来会增加一点压缩。

【讨论】:

  • jsonh 不是 hpack 的继承者。它们使用类似的存储格式,但 hpack 深入到对象中,而 jsonh 只转换一级数组,忽略嵌套对象。两者都不是压缩工具,而是同类数据的高效存储格式。
  • 好的,感谢您的更正。我一定对“JSONH 是 json.hpack 项目的最新版本,基于 JSONDB 概念”感到困惑。在 jsonh 页面上。
  • 好吧,好吧,它是继任者。不过它们有不同的功能。
【解决方案4】:

根据this tweet by modec,压缩JSON确实是可以的,提供better result than tested alternatives

可以handle JSON format with nodejs,最近一个开源项目刚刚实现了very fast compression algorithm for nodejs

【讨论】:

    【解决方案5】:

    JsonZipper 对于多个相似的重复对象也很棒。 它允许您通过仅按索引从数组中提取一个对象来使用处于其'压缩状态的对象,因此在内存方面它很棒,因为它总是只提取你想要的东西。

    哦,您实际上可以随时随地压缩,因此基本上在您生成数据对象时,您可以压缩它们,从而始终占用较小的内存。

    大多数其他压缩算法必须一次压缩和提取所有数据。

    但是请注意:如果您的数据是同构集合(完全相同的键,那么 hpack 会更好。)

    【讨论】:

    • 这个项目看起来完全死了,有一个匿名用户“u12206050”,几乎没有追随者
    • 可能只是工作,目前不需要进一步改进:P
    猜你喜欢
    • 2010-11-04
    • 2014-01-07
    • 2013-10-30
    • 2010-09-06
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多