通过替换常用字符串来压缩 JSON

Compressing JSON by replacing often used Strings?

本文关键字:压缩 JSON 字符串 常用 替换      更新时间:2023-09-26

我当时使用JSON并保存了一些数据。由于我可以通过替换常用的字符串来节省大量空间,因此我想知道是否有任何算法可以做到这一点。我更喜欢Javascript,因为我使用JavaScript和NodeWebkit,但是知道是否存在这样的东西会很好。因为我使用NodeWebkit执行此操作,所以数据存储到客户端计算机,所以我没有服务器可以与之通信。此外,它必须是一个独立的应用程序,所以我不应该使用外部程序。

我想从中得到:

{
    "Attribute1" : "This is my very long string",
    "Attribute2" : "This is my very long string",
    "Attribute3" : {
         "innerObjectAttribute": "This string contains the word Attribute"
     }
}

对象如下:

{
    "$$1" : "Attribute",
    "$$2" : "This is my very long string",
    "data": {
           "$$11" : "$$2",
           "$$12" : "$$2",
           "$$13" : {
                 "innerObject$$1" : "This string contains the word $$1"
            }  
     } 
}

在这个例子中,算法已经可以节省空间(没有空格),但是想象一下你多次使用长词或路径的一部分(我这样做)的情况 - 在我的情况下它可以节省很多(!!)空间。

我的旧 JSON 对象刚刚保存在 data 属性下,所有被替换的字符串都在此之前并具有自己的属性 - 但在整个 JSON 文件中只有一次。

当用户使用像 $$1 这样的字符串时,它们的问题应该由算法本身来考虑。

我想用解析/撤消函数取回我的输入 JSON 字符串。有人可以在这里帮忙吗?

最简单的

形式是每个基于字典的压缩(gzip,zip,deflate)的想法。几乎每个Web服务器都有一个gzip/defalte模块,只是激活它,gzip/deflate压缩是在HTTP中指定的。优点是 gzip 比你的方法更诡辩,并且是透明的,并且只有在客户端可以解压缩它的情况下(几乎每个 http 客户端都可以)

示例请求如下所示:

GET /encrypted-area HTTP/1.1
Host: www.example.com
Accept-Encoding: gzip, deflate

响应

HTTP/1.1 200 OK
...
Accept-Ranges: bytes
Content-Length: 438
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip