通过替换经常使用的字符串来压缩JSON?

时间:2015-01-20 14:51:12

标签: javascript json data-structures

我当时使用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-Object刚刚保存在data属性下,所有被替换的字符串都在此之前并具有自己的属性 - 但只在整个JSON文件中存在一次。

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

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

1 个答案:

答案 0 :(得分:1)

这是最简单的形式,每个dictionary based compression(gzip,zip,deflate)的概念。几乎每个web服务器都有一个gzip / defalte模块,只需激活它,gzip / deflate压缩就是specified in 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