JSON 字符串如何转换为短链接

45 天前
 zzlit

例如有一串很长的 JSON 字符串 '{"x":5,"y":6}' ,我想转为短链,并且拿到短链的还能反编译为原值。考虑了几个压缩的库发现字符串长度并不会更短,甚至还会更长。

那其实应该是需要先进行把能精简长度的尽量精简,比如 key ,然后再进行一定的规则转为短链而不是单纯的压缩,有大佬能谈一下这个转换的规则吗? JavaScript 库或者算法都可以。

另外我了解现在的短链大部分是有服务端参与存储在数据库里面的,但是有无纯前端的方案呢?

3297 次点击
所在节点    程序员
54 条回复
zzlit
45 天前
@kzfile 对的,我就是没有想好这种算法怎么设计好,想问问大家
zzlit
45 天前
@cheng6563 曲线救国了~
siweipancc
45 天前
害怕……哪有这么玩的
cmdOptionKana
45 天前
感觉是个 XY 问题,建议说出最终是想做什么。
systemGuest
45 天前
@meeop MD5:你在讲什么?
systemGuest
45 天前
数据库设计个表 id(自增 ID),md5(唯一索引),json(实际内容) 3 个字段
假如 json={"x":5,"y":6} ,md5 就是 {"x":5,"y":6}=225a399a7b45045f ,如果这个 md5 不存在就把 md5 和 json 内容写到表里,返回了自增 ID 1 ,你可以生成短连接 url/1 ,用户访问这个短连接 你也可以通过携带的 1 反查自增 id=1 json 内容
ixcode
45 天前
你的需求是数据压缩,短链接是一个 a->b 的映射。
json 本身不是一个高效率的格式,他的优点是可读性好。光看那些引号就知道有多浪费空间了。
MoYi123
45 天前
请学习数论入门课题之抽屉原理(说难听点是小学奥数的内容)
0o0o0o0
45 天前
短链 反编译(我理解为解码)
说明你是要拿到这个 url 走自己的程序解码,并且尽可能看起来短
那直接用 https://example.com/[所有编码内容]
编码的字符直接用除了 [url 保留字符] 的所有其他字符就好了。
hex 是 16 进制,你完全可用 0-9 a-z A-Z -_.~ 做一个 66 进制。
再大胆一点,利用常用汉字做个 2048 进制,虽然汉字实际存储占用很大,但是看起来短就行。
ink19
45 天前
@systemGuest #25 md5 是摘要算法,损失了数据的
SilentRhythm
45 天前
1. 字典表
2. 网络传输考虑 protobuf 或 gzip
3. 如果是简单对象,可以考虑 url query string ,如 x=5&y=6 ,有一定可读性
0o0o0o0
45 天前
@0o0o0o0 想错了,常用汉字可以做 4096 进制,也就是 12 位二进制作为一个汉字,但是汉字是全角字符,视觉上占用两个半角字符,“压缩比”大概是 6.
如果是 url 非保留字符 可以 64 进制,也就是 6 位二进制作为一个字符,所以还是用 0-9 a-z A-Z -_.~ 做一个 64 进制的就好了。
用 hex 的话是 4 位二进制作为一个字符,用 url 非保留字符相比 hex 可以缩短 1/3
0o0o0o0
45 天前
“考虑了几个压缩的库发现字符串长度并不会更短,甚至还会更长。”
是因为即使是 ascii 范围的字符也有 128 个,而转成 hex 之后,hex 只有 16 个字符,相当于你压缩完只有原来的 1/8 大小才能不变短。
0o0o0o0
45 天前
@0o0o0o0 不变长,说错了
darkengine
45 天前
信息论的东西
frankly123
45 天前
JOSN 文件,往 CDN 传,文件名拼接到链接上
molvqingtai
45 天前
@zzlit @perfsee/jsonr 这个包能压缩 JSON ,原理是提取重复的 JSON 字符
JShen
45 天前
@systemGuest #26 你这个有漏洞的,最好还是返回 md5 ,因为 id 会让人爬完。并且无法应对大量的短链。后续分表不好使
InkAndBanner
45 天前
如果真能实现 ,恭喜你发现了世界上最先进的压缩算法
jydeng
45 天前
你可以搜一下 lz-string ,但也不可能压缩成短链。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1088759

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX