我当时使用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字符串。 有人可以在这里帮忙吗?
答案 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