我正在考虑实现一个具有导入/导出功能的新项目。首先,我将有一个大约45个对象的数组。对象结构是这样简单。
{"id": "someId", "quantity": 3}
因此,为了使它可导出,我必须先将这些对象的整个数组更改为一个字符串,对于这一部分,我想我将使用JSON.stringify(),然后,我希望字符串尽可能短,以便用户使用(复制字符串并粘贴以共享给其他用户,以便将其导回以获得原始数组)。我知道这部分是不必要的,但我真的想让它尽可能短。因此,问题是:如何将对象数组转换为尽可能短的字符串?
编码、加密或散列等任何技术都是可以接受的,只要这些技术能够可逆地获取原始数据。
所谓“shortest possible",我的意思是你可以回答任何比纯字符串化更短的解决方案,我只接受一个给出最短字符串的解决方案。
我试过文本缩小,但它给出的结果与原文几乎相同。我也试过加密,但它仍然给出了相对较长的结果。
注意:用于导入的字符串(来自导出)可以是人类可读的或不可读的。这无关紧要。
2条答案
按热度按时间hc2pp10m1#
删除
:
冒号和,
逗号后面的json可选空格是一件很容易的事情。让我们假设你已经用这种方法缩小了。xz
压缩通常是有用的。也许你知道一些字符串很可能在输入
doc
中重复出现,这可能包括:构造一个
prefix
文档,其中包含这些术语。发送方将压缩prefix
+doc
,剥离初始不变字节,然后发送其余字节。接收方将通过TCP接受这些字节,并将不变字节前置,然后解压缩。为什么这样做可以提高压缩比?Lempel-Ziv和相关方案维护一个字典,并将整数索引传输到该字典中以指示常用单词。单词可以相当长,甚至比"数量"还长。单词越长,节省的空间越大。
如果发送者和接收者事先都知道一组属于词典的单词,我们就可以避免发送这些单词的原始文本。
你的chrome浏览器compresses web headers已经以这种方式,每次你做谷歌搜索。
最后,您可能希望对压缩后的输出进行base64编码。
Ignore compression, and use a database instead, in the way that tinyurl.com has been doing for quite a long time. Set
serial
to1
. Accept a new object, or set of objects. Ask the DB if you've seen this input before. If not, store it under a brand new serial ID. Now send the matching ID to the receiving end. It can query the central database when it gets a new ID, and it can cache such results to use in future.owfi6suc2#
您可以选择简单的CSV导出。如果使用管道分隔符,则导出字符串将变为如下形式:
这相当于
这种方法将删除每条记录的冗余
id
和quantity
标记,并删除不必要的双引号。缺点是所有记录都应该具有相同的数据结构,但通常情况下都是如此。